php / אימות ומעקב אחר משתמשים עם php / שימוש ב'קוקיס'

שימוש ב'קוקיס' (קראנץ' קראנץ' קראנץ')



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

יש ביכולתכם ליצור אחדות מסוימת בין משתמשים אנונימיים ע"י שימוש ב'קוקיס' האוצרים מידע חיוני . השימוש ב'קוקיס' מוכר גם כ"ניהול מדינה".
משמעות הדבר היא שכאשר שרת הרשת שולח 'קוקי' לדפדפן שלכם והוא מקבל אותו, ההתקשרות ביניהם תמשך עד תום תוקף ה'קוקי' . שרת הרשת עדיין לא יידע הרבה עליכם, אבל לפחות הוא יוכל לדעת שנפגשתם בעבר ושהוא אהב אתכם מספיק כדי לתת לכם להישאר.

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

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

לא משנה באילו קוקיס החלטתם לעשות שימוש, הנה פן אחד מאוד חשוב שעליכם לזכור: אתם חייבים חייבים חייבים להציב 'קוקי' לפני שאתם שולחים כל מידע אחר לדפדפן. זכרו את זה ותחסכו לעצמכם שעות של תהיה לפשר הודעות שגיאת ה- header שאתם מקבלים !

קחו לדוגמא את ballgirl athletic , אתר שיצרתי שמוכר ציוד ספורט לנשים.
האתר עושה שימוש ב'קוקי' יחיד , המכיל ID ייחודי לכל משתמש. קטע קוד נפוץ בכל עמוד בודק את ה'קוקי' הזה, ואם הוא לא קיים, הוא מייצר אותו. זה חיוני, מאחר ובכל עמוד יש אייקון של עגלת קניות וסימון של מספר המוצרים הקיימים בה.

בפעם הראשונה בה המשתמשים ניגשים לאיזשהו עמוד באתר , הם מקבלים מספר שרירותי בתור ה ID- שלהם.

כל עמוד מתחיל בערך כך:

<?php

// set cookie if not already set

if (!isset($id)) {
srand((double)microtime()*1000000);
$randval = rand();
setcookie("id",$randval,time()+14400,"/",".ballgirl.com
", 0);

}

?>


כל זה טוב ויפה, אתם אומרים, אבל מה יש פה לעזאזל ? ובכן שתי השורות הראשונות אחרי ביטוי ה-if מאתחלות את המספר השרירותי, שמנפיק ערך ID למשתמש. המספר השרירותי הזה יהיה דומה בדרך כלל למשהו בסגנון 1404291115 .

עכשיו ,נציב את ה'קוקי'

;( setcookie("id",$randval,time()+14400,"/",".ballgirl.com


התחביר של פונקצית ה - ()setcookie ב- PHP הוא:

setcookie(name, value, expiration, path, domain, security);


בדוגמה שלנו, אנחנו קוראים ל'קוקי' "id" ומגדירים לו את הערך randval$ .
ה'קוקי' הספציפי הזה יסתיים תוך ארבע שעות (הזמן הנוכחי פלוס 14,400 שניות).
הקוקי תקף בכל עמוד מתחת למסמך השורש בדומיין Ballgirl.com .

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

המשתמש מגיע לאתר ומקבל 'קוקי' עם איזשהו ערך בתוכו. כדי לעשות שימוש חוזר בערך הזה , אתם יכולים לקבל אותו מהמשתנה הגלובאלי של PHP בשם - HTTP_COOKIE_VARS$ .

בדוגמא שלנו מלמעלה, חילצנו את ערך ה"id" מהקוקי כך:

$id = $HTTP_COOKIE_VARS["id"]


ב - ballgirl athletic, ערכי הid - שב'קוקיס' נרשמים לתוך מאגר מידע ,כאשר המשתמשים מוסיפים פריטים לעגלות הקניות שלהם. עגלות אלה הן בעצם טבלאות מאגרי מידע שנראות כך:

id item_id item_qty item_color item_size
1404291115 BG_LPR 1 Teal/Navy Blue OSFA

ככל שמשתמשים יוסיפו יותר ויותר פריטים לעגלות הקניות שלהם , כך ישתנה מספר הפריטים הנבחרים המוצג בכל עמוד, מאחר והוא מתעדכן בכל פעם שהם ניגשים אליו . כדי לקשר בין מספר הפריטים לבין ID של משתמש מסוים, נשתמש בביטוי SQL:

id='$id'"; $sql = "select sum(item_qty) from db_table where


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

<?php

$id = $HTTP_COOKIE_VARS["id"]

// connect to MySQL

mysql_connect("hostname", "username", "password")
or die ("Unable to connect to database.");

// select database on MySQL server

mysql_select_db("dev_i2ii_com")
or die ("Unable to select database.");

// prepare SQL statement

$sql = "select sum(sel_item_qty) from db_table where id='$id'";

// query DB using SQL statement

$item_result = mysql_query($sql);

// assign value to variable called $item_count

$item_count = mysql_result($item_result,0,"sum(item_qty)");

?>


כאשר אתם מוכנים להציג את מספר הפריטים הקיימים בעגלת הקניות של המשתמש הספציפי הזה, פשוט שלפו אחורה את ערך ה item_count$ :

echo "Cart contains: $item_count items.";


או, אם אתם את רוצים להיות" קורקטים" תחבירית:

if ($item_count == "1") {

echo "Cart contains: $item_count item.";

} else {

echo "Cart contains: $item_count items.";

}


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

נאמר שהקמתם קוקי:

setcookie("valid_user","yes",time()+14400,"/",".yourdomain.com",0);


שם ה'קוקי' הוא "valid_user" (משתמש מורשה) וערכו הוא "yes" .
כדי למחוק את ה'קוקי' הזה, גרמו לסקריפט שלכם לשלוח 'קוקי' כמעט זהה, ההבדל היחיד יהיה שהערך יוגדר כמחרוזת ריקה (""):

setcookie("valid_user","",time()+14400,"/",".yourdomain.com",0);


תהליך זה מוחק בסופו של דבר את הקוקי . חסל סדר ."valid user"



עמוד הבא: סשנים הם התשובה >>




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