PHP/Sessions: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
דף חדש: כדי להתחיל את הsessions יש להשתמש בפונקציה session_start() לפני כל פלט(header) שנשלח לדף (שימוש בHTML או בeach) ולאחר מכן ...
 
Tnadav (שיחה | תרומות)
אין תקציר עריכה
שורה 1:
= הקדמה =
כדי להתחיל את הsessions יש להשתמש בפונקציה session_start() לפני כל פלט(header) שנשלח לדף (שימוש בHTML או בeach) ולאחר מכן אפשר לשים משתנים שישמרו לאורך המעבר בדפים הבאים ב
PHP תומכת ב- session בצורה פשוטה ונוחה, התפקיד של session הוא לשמור מידע על הגולש באתר לפרקי זמן בו הגולש נמצא באתר, ולאחר פרק זמן מסוים (תלוי בקונפיגורציה) שהמשתמש לא פעיל, ה- session נמחק אוטומתית.
$_SESSION["פה רושמים את שם המשתנה"] = "ערך";
 
כדי למחוק SESION יש להשתמש בunset()
= אופן פעולת ה-session =
המידע הנשמר בעזרת session נשמר בתוך קבצים הנמצאים בשרת. כאשר משתמש חדש ללא session נכנס לאתר, PHP יוצרת בשבילו מזהה ל- session הנקרא session id, כך PHP מזהה איזה מידע "שייך" לגולש.
session id נשמר אצל הגולש דרך הכתובת, או דרך עוגיה (תלוי בקונפיגורציה), ברוב הפעמים משתמשים בעוגיה, מיכוון שהדרך הזו מאובטחת הרבה יותר.
 
 
= איתחול ה- session =
בשביל לאתחל session יש להשתמש בפונקציה session_start, במקרה וה- session id נשמר בעוגיות, הקריאה לפונקציה חייבת להיות לפני כל פלט ללקוח. בעייה נפוצה היא שהפונקציה באמת נקראת לפני כל פלט, אבל יוצאת הודעת שגיאה בסגנון:
<div style="direction: ltr;">
Warning:
Cannot modify header information -
headers already sent by (output started at /home/******/domains/*****/public_html/conf.php:**)
in /home/*****/domains/*****/public_html/file.php on line **
</div>
הסיבה לכך, היא שהקובץ נשמר בקידוד UTF-8 כולל מה שנקרא חתימת BOM האומרת כי הקובץ נשמר ב- UTF-8, ובגלל באג ב- PHP אותה חתימה מזוהה כפלט, ב- PHP 6 ככל הנראה ייצא פיתרון לאותו באג.
הפיתרון הוא להשתמש בעורך שיודע לשמור utf-8 בלי אותה חתימה (כמו noteped++) ולשמור את הקובץ בלי חתימה.
 
 
= יצירת session =
לאחר שה- session אותחל, ניתן להכניס עליו ערכים. בשביל להכניס ערכים ל- session משתמשים במערך הגלובאלי:
<div style="direction: ltr;">
$_SESSION
</div>
בשביל למשל, ליצור session בשם hello עם הערך world, נכתוב:
<div style="text-align:left; direction:ltr;"><pre>
$_SESSION['hello'] = "world";
</pre></div>
= מחיקת session =
כמו מחיקת משתנים רגילים, מחקית session מתבצעת באמצעות הפונקציה unset, למשל, אם נרצה למחוק את ה- session בשם hello, נכתוב:
<div style="text-align:left; direction:ltr;"><pre>
unset($_SESSION['hello']
</pre></div>