PHP/Sessions

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
< PHP

הקדמה[עריכה]

PHP תומכת ב- session בצורה פשוטה ונוחה, התפקיד של session הוא לשמור מידע על הגולש באתר לפרקי זמן בו הגולש נמצא באתר, ולאחר פרק זמן מסוים (תלוי בקונפיגורציה) שהמשתמש לא פעיל, ה- session נמחק אוטומטית.

אופן פעולת ה-session[עריכה]

המידע הנשמר בעזרת session נשמר בתוך קבצים הנמצאים בשרת. כאשר משתמש חדש ללא session נכנס לאתר, PHP יוצרת בשבילו מזהה ל- session הנקרא session id, כך PHP מזהה איזה מידע "שייך" לגולש. session id נשמר אצל הגולש דרך הכתובת, או דרך עוגיה (תלוי בקונפיגורציה), ברוב הפעמים משתמשים בעוגיה, מכיוון שהדרך הזו מאובטחת הרבה יותר.

איתחול ה- session[עריכה]

בשביל לאתחל session יש להשתמש בפונקציה session_start, במקרה וה- session id נשמר בעוגיות, הקריאה לפונקציה חייבת להיות לפני כל פלט ללקוח. זאת מכוון שהעוגיות שעליהם נשמר היישן הן סוג של כותב (header) שנשלח דרך HTTP. לאחר הדפסת תוכן הכותרים כבר נשלחו ולא ניתן לשלוח אותם מחדש. יש לבדוק שאין שורה ריקה או סימן BOM לפני קוד הPHP.

בעייה נפוצה היא שהפונקציה באמת נקראת לפני כל פלט, אבל יוצאת הודעת שגיאה בסגנון:

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 **


הסיבה לכך, היא שהקובץ נשמר בקידוד UTF-8 כולל מה שנקרא חתימת BOM האומרת כי הקובץ נשמר ב- UTF-8, ובגלל באג ב- PHP אותה חתימה מזוהה כפלט, ב- PHP 6 ככל הנראה ייצא פיתרון לאותו באג.

הפיתרון הוא להשתמש בעורך שיודע לשמור utf-8 בלי אותה חתימה (כמו noteped++) ולשמור את הקובץ בלי חתימה.

יצירת session[עריכה]

לאחר שה- session אותחל, ניתן להכניס עליו ערכים. בשביל להכניס ערכים ל- session משתמשים במערך הגלובאלי:

$_SESSION

בשביל למשל, ליצור session בשם hello עם הערך world, נכתוב:

$_SESSION['hello'] = "world";

מחיקת session[עריכה]

כמו מחיקת משתנים רגילים, מחיקת session מתבצעת באמצעות הפונקציה session_destroy, ע"מ להפעילה נכתוב:

session_destroy();