php / אימות ומעקב אחר משתמשים עם php / סשנים והעדפות משתמש

סשנים והעדפות משתמש



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

בתור צעד ראשון , צרו קובץ בשם. session01.php אתחלו 'סשן' אם כזה לא קיים , ורשמו את המשתנים בהם נשתמש מאוחר יותר body_color$ ו- text_color$.

<?

// File name: session01.php

session_start();

if (!$PHPSESSID) {
session_register('body_color');
session_register('text_color');

} else if ((!$body_color) || (!$text_color)) {
session_register('body_color');
session_register('text_color');

}

?>


אוקיי, יכול להיות שבלבלתי אתכם שם לרגע לולאת ה if/else -הזה היא מאוד חשובה. היא רושמת את משתני ה'סשנים' אך ורק במקרה שלא קיים ערך ל- PHPSESSID$ או שהמשתנים body_color$ ו- text_color$ עוד לא נוצרו או נרשמו לתוך 'סשן'.

יש סיבה טובה לכך , אני מבטיחה. מאחר ומשתמשים חוזרים לעמוד הזה כדי לעדכן מחדש את העדפות הצבע שלהם, עלינו לקחת בחשבון שערכי body_color$ ו- text_color$ צריכים להיות מחולצים מה'סשן' עצמו.

שימו לב לזה:


<?

session_start();
session_register('body_color');
session_register('text_color');

?>


אם היינו משתמשים בזה רק בראש העמוד, אז כל פעם שהעמוד היה נטען , ערכי body_color$ ו- text_color$ היו מתעדכנים כמחרוזת ריקה או כמשתנה חדש וריק.

סמכו עלי; עוד נשוב לתפיסה הזאת. בינתיים, ניצור טופס HTML פשוט שמבקש מהמשתמשים לבחור את העדפות הצבע שלהם.. מאחר והמשתמשים יחזרו לעמוד הזה בהמשך כדי לעדכן את העדפותיהם, תרצו גם להציג אותו בצבעים הנבחרים.
לכן, לפני תווית ה- <HTML> BODY נוסיף מעט PHP שיוכל לקבוע את הצבעים המועדפים על המשתמש , אם יש כאלה , או להגדיר את ברירות המחדל במקרה שההעדפות טרם עודכנו.

בסופו של דבר, הקוד שלכם אמור להיראות בערך כך:


<?

// File name: session01.php

// if a session does not yet exist for this user, start one

session_start();

if (!$PHPSESSID) {
session_register('body_color');
session_register('text_color');

} else if ((!$body_color) || (!$text_color)) {

session_register('body_color');
session_register('text_color');

}

?>

<HTML>
<HEAD>
<TITLE>Setting Prefs</TITLE>
</HEAD>

<?

if (!$body_color) {
$body_color = "#FFFFFF";
}

if (!$text_color) {

$text_color = "#000000";

}

?>

<BODY BGCOLOR="<? echo "$body_color"; ?>"
TEXT="<? echo "$text_color"; ?>">

<H1>Set Your Color Preferences</h1>
<FORM METHOD="POST" ACTION="session02.php">
<P><strong>Pick a Background Color:</strong><br>
<input type="radio" name="sel_body_color" value="#FFFFFF">white
<input type="radio" name="sel_body_color" value="#000000">black
<input type="radio" name="sel_body_color" value="#7FFF00">chartreuse
<input type="radio" name="sel_body_color" value="#B0C4DE">light steel blue
<input type="radio" name="sel_body_color" value="#FF6347">tomato
</p>

<P><strong>Pick a Text Color:</strong><br>
<input type="radio" name="sel_text_color" value="#FFFFFF">white
<input type="radio" name="sel_text_color" value="#000000">black
<input type="radio" name="sel_text_color" value="#F5DEB3">wheat
<input type="radio" name="sel_text_color" value="#BC8F8F">rosy brown
<input type="radio" name="sel_text_color" value="#00FF7F">spring green
</p>

<P><input type="submit" name="submit" value="Set Prefs"></p>

</FORM>
</BODY>
</HTML>


בצעד הבא, פעולת הטופס, (session02.php) נגדיר את ערכי הצבעים שנבחרו ע"י המשתמש למשתני ה'סשנים' המתאימים. התחילו ביצירת 'סשן' אם כזה לא קיים עדיין ורשמו את משתני ה'סשנים' body_color$ ו- text_color$ אם הם עדיין לא קיימים.

זכרו, מאחר והגדרנו ערכים זמניים ל- body_color$ ול- text_color$ בצעד הראשון, הם לא נחשבים ריקים ולכן לא ירשמו מחדש עם ה'סשן'.

<?

// File name: session02.php

// if a session does not yet exist for this user, start one

session_start();

if (!$PHPSESSID) {
session_register('body_color');
session_register('text_color');

} else if ((!$body_color) || (!$text_color)) {
session_register('body_color');
session_register('text_color');

}

?>


עכשיו הגדירו את הערכים הנבחרים למשתני ה'סשנים':

// do something w/ POST vars

$body_color = $sel_body_color;
$text_color = $sel_text_color;


אתם עלולים לתהות מדוע לא פשוט קראנו ליסודות ההכנסה לטופס "body_color"
ו"text_value". וכך בצורה הזאת, היינו מקבלים אוטומטית את הערכים החדשים נכון ?
לא נכון. בגלל סיבות אבטחה חשובות, לא ניתן לשנות את ערכיהם של משתני 'סשנים' רשומים באמצעות POST או GET. בסקריפט שלכם תיאלצו להגדיר מפורשות את הערכים החדשים, בדיוק כפי שעשינו כאן.

סיימו את הסקריפט בבדיקת ערכי שני המשתנים והגדרת ערכי ברירת המחדל עבורם במקרה שהם עדיין ריקים ( אם, לדוגמא, משתמש ניגש לצעד 2 לפני צעד 1 ) מסיבה מעצבנת זו או אחרת . הדפיסו את הערכים בתווית < BODY > ובמקומות אחרים בסקריפט שלכם, רק כדי להראות למשתמשים שהם אכן השתנו.

קדימה, העלו אותם ושוטטו קדימה ואחורה בין session01.php ל - session02.php. אני לא ממליצה על בז' עם רקע ירוק-צהבהב.



עמוד הבא: סיכום >>




הקדמה
אימות HTTP עם
PHP
אימות מול קובץ
שטוח
אימות מול מאגר
מידע
שימוש ב'קוקיס'
סשנים הם
התשובה
סשנים והעדפות
משתמש >
סיכום