PHP/Sessions
מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.
תוכן עניינים |
[עריכה] הקדמה
PHP תומכת ב- session בצורה פשוטה ונוחה, התפקיד של session הוא לשמור מידע על הגולש באתר לפרקי זמן בו הגולש נמצא באתר, ולאחר פרק זמן מסוים (תלוי בקונפיגורציה) שהמשתמש לא פעיל, ה- session נמחק אוטומטית.
[עריכה] אופן פעולת ה-session
המידע הנשמר בעזרת session נשמר בתוך קבצים הנמצאים בשרת. כאשר משתמש חדש ללא session נכנס לאתר, PHP יוצרת בשבילו מזהה ל- session הנקרא session id, כך PHP מזהה איזה מידע "שייך" לגולש. session id נשמר אצל הגולש דרך הכתובת, או דרך עוגיה (תלוי בקונפיגורציה), ברוב הפעמים משתמשים בעוגיה, מיכוון שהדרך הזו מאובטחת הרבה יותר.
[עריכה] איתחול ה- session
בשביל לאתחל session יש להשתמש בפונקציה session_start, במקרה וה- session id נשמר בעוגיות, הקריאה לפונקציה חייבת להיות לפני כל פלט ללקוח. בעייה נפוצה היא שהפונקציה באמת נקראת לפני כל פלט, אבל יוצאת הודעת שגיאה בסגנון:
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 מתבצעת באמצעות הפונקציה unset, למשל, אם נרצה למחוק את ה- session בשם hello, נכתוב:
unset($_SESSION['hello']);