פרק 18: עוגיות - Cookies
·
הקדמה
·
יצירת עוגיה
·
התכונה Expires
·
התכונה Path
·
התכונה Domain
·
התכונה Secure
·
קבלת האינפורמציה שמאוחסנת בתוך עוגיה
·
תרגילים
הקדמה
כאשר
צופים בדף HTML,
לעתים נשמרות במחשב שלנו חבילות נתונים קטנות שנשמרות בקובץ אחד או יותר ושמכילות
אינפורמציה שנוגעת לדפים שבהם צפינו. חבילות נתונים אלה נקראות בשם cookies. ה-cookies
מאפשרים שמירת אינפורמציה כגון סיסמאות כניסה, ואינפורמציה אחרת על התכנים שבהם
צפינו. באמצעות ה-cookies
ניתן, למשל, לאפיין כל גולש וגולש שמבקר באתר ולהציג בפניו את הפרסומות שמתאימות
לתחום העניין שלו.
האופן
שבו נשמרים ה-cookies
ושמותיהם משתנה בהתאם לסוג הדפדפן ובהתאם לסוג המחשב. כאשר מדובר ב-Netscape
Nevigator קיים קובץ אחד ששמו cookies.txt, אשר מכיל בתוכו את כל ה-cookies
שנשמרים במחשב. כאשר מדובר ב-Internet Explorer קיימים מספר קבצי cookies
אשר נשמרים בספריה ששמה cookies.
כל קובץ מכיל חבילת נתונים אחת (cookie
אחת).
כיוון
שהקובץ cookies הוא קובץ טקסט ניתן לצפות בו ולהתרשם מתוכנו. יש להיזהר מלשנותו
כיוון שבכך עלול להיגרם נזק לפעולת הדפדפן בעת הצפייה באתרים שמסתמכים בפעולתם על
ה-cookies.
הקובץ
cookies מכיל בתוכו חבילות נתונים (עוגיות,cookies). כל עוגיה כוללת בתוכה את האינפורמציה הבאה:
ה-domain אשר יצר את העוגיה.
האם
יש צורך בקשר מאובטח (secure
HTTP) כדי לגשת לעוגיה.
רשימת
ה-URLS אשר יכולים לגשת אל העוגיה.
התאריך
שבו פג התוקף של העוגיה.
שמה
של העוגיה.
מחרוזת
התווים שמהווה את תוכן העוגיה.
כפי
שניתן לשים לב, כל עוגיה נוצרת על ידי domain
מסוים ומשויכת אליו.
כיוון
שהקובץ cookies.txt, אשר מוחזק באחת מתתי ספריותיו של הדפדפן, מוגבל במספר העוגיות
שהוא יכול להכיל בתוכו, יש לכל עוגיה תאריך תפוגה. תאריך התפוגה נקבע בעת יצירת
העוגיה על ידי ה אתר שהורה על יצירתה. הדפדפן Netscape
Nevigator מורה על מחיקתה של כל
עוגיה, שתאריך תפוגתה הגיע, מתוך הקובץ cookies.txt.
אם
בעת יצירתה של העוגיה לא קובעים לה תאריך תפוגה (expiretion date)
אז העוגיה אפילו לא תיכתב אל הקובץ cookies.txt.
עוגיות מסוג זה יכולות לשמש כלי תכולה לנתונים שנדרשים במעבר בין דפי ה-HTML השונים של האתר. עוגיות מסוג זה שימושיות בייחוד לצורך יצירת סל
קניות וירטואלי באתר שמספק מסחר אלקטרוני.
אפשרויות
הגישה לעוגיות באמצעות פקודות ב-javaScript
כוללות את האפשרות ליצור עוגיה ולקבוע את מאפייניה השונים בעת יצירתה (תאריך
התפוגה למשל) וכמו כן, הן כוללות גם את האפשרות לקבל בחזרה את הנתונים שמאוחסנים
בעוגיה קיימת.
העוגיות
נחשבות ב-javaScript לתכונות שיש בכל אובייקט מסוג document. כדאי לשים לב לכך שכל דפדפן מגביל את מספר העוגיות שניתן לייצור
מ-domain מסוים.
יצירת עוגיה
כדי
ליצור עוגיה (חבילה של נתונים, cookie)
משתמשים באופרטור ההשמה (סימן השוויון) ומכניסים כערך אל תוך התכונה cookie, אשר קיימת באובייקט documen,
את מחרוזת התווים שמכילה את שם העוגיה ואת תוכנה. אם רוצים לקבוע את מאפייני
העוגיה אז יש להוסיף כחלק מתוכנה של העוגיה גם את קביעת מאפייניה(יוסבר בהמשך).
דוגמא:
document.cookie = "amazonBasket =
java2d_1_1234232+swing_1_1231232"
בדוגמא זו,
למשל, נוצרת עוגיה ששמה amazonBasket,
ותוכנה הוא המחרוזת: java2d_1_1234232+swing_1_1231232.
כאשר יוצרים,
למשל, את העוגיה הזו יודעים מראש מהו הפורמט שבו הנתונים יישמרו בתור תוכנה של
העוגיה. על פי פורמט זה הנתונים נשמרים/נקראים אל/מ העוגיה.
בכל
יצירה של עוגיה חייבים לכלול את שם העוגיה שיוצרים ואת תוכנה (כפי שהוצג בדוגמא).
אם העוגיה שיוצרים לא קיימת (הדפדפן לא זיהה עוגיה קיימת ששמה זהה לשם העוגיה
שיוצרים) אז הוא יוצר עוגיה חדשה ששמה ותוכנה כפי שצויין. לעומת זאת, אם העוגיה
שיוצרים כבר קיימת (הדפדפן זיהה עוגיה קיימת ששמה זהה לשם העוגיה שיוצרים) אז הוא
מעדכן את תוכנה ואת נתוניה על פי נתוני העוגיה החדשה. הצמד: שם התכונה וערכה חייב
להיות מחרוזת תווים אשר איננה כוללת נקודות פסיק, פסיקים, סימני טאב וריווחים. את
בעיית הריווחים ניתן לפתור באמצעות המתודות escape() ו- unescape()
אשר הופכות ריווחים במחרוזת ל %20, ולהפך. שתי מתודות אלה יכולות לשמש, באופן
דומה, גם כדי לטפל בסימנים המיוחדים האחרים שמופיעים במחרוזת התווים. אם רוצים
לקבוע עוגיה שתוכנה הוא אוסף של ערכים שמאוחסנים במערך ניתן להשתמש במתודה join אשר ניתנת להפעלה על אובייקט מסוג Array, ובמתודה split
אשר ניתנת להפעלה על מחרוזת תווים.
אם
יצירת העוגיה נעשתה מבלי לציין את ערכי מאפייניה (כפי שהדוגמה מראה) אז הערך שיקבע
לכל אחד ממאפייניה יהיה ערך ברירת המחדל שיש לאותה תכונה (כך למשל, אם לא צוין ה-expiretion
date אז העוגיה אפילו לא תיכתב
אל הקובץ cookies.txt). כדי להוסיף אל
תוך המחרוזת את ערכי מאפייניה של העוגיה יש להוסיף בהמשך המחרוזת סימני נקודה-פסיק
בצירוף ריווח בודד כסימנים מפרידים בין התוכן של העוגיה לבין קביעת מאפייניה, וכמו
כן, כסימנים מפרידים בין קביעת מאפייניה השונים. המאפיינים של העוגיה אשר ניתן
לקבוע כוללים את המאפיינים הבאים: expires,
path, domain
ו-secure.
דוגמא:
document.cookie = "zindellCookie=music_sport;
expires=Sat, 03-Jan-70 22:10:12 GMT; path=buyingArea;
domain=http://www.zindell.com;secure"
המאפיין Expires
הערך
שמאפיין זה מקבל הוא מחרוזת תווים (בפורמט GMT)
אשר מתארת את מועד התפוגה של העוגיה. מועד התפוגה של עוגיה הוא נקודת הזמן שהחל
ממנה ואילך העוגיה לא תתפוס יותר מקום בקובץ cookies.txt, כלומר, לא תישמר עוד במחשב של המשתמש. הדפדפן Netscape
Nevigator מעלה לזיכרון הפעולה שלו,
בתחילת פעולתו, את כל העוגיות שנשמרו במחשב. במהלך פעולתו הוא לא פונה יותר לקובץ cookies.txt כדי להעלות עוגיות נוספות, ורק כאשר הוא מסיים לפעול הוא שומר חזרה
לקובץ את כל העוגיות שקיימות בזיכרון שלו.
ניתן לקבל
מחרוזת טקסט שמתארת נקודת זמן בפורמט GMT
(Greenwich
Mean Time) באמצעות הפעלת המתודה toGMTString() על אובייקט מסוג Date.
לדוגמא:
var expDate = new Date();
document.cookie = "zindellCookie=music_sport_;
expires=" + expDate.toGMTString()
בקובץ
cookies.txt ערכה של התכונה הזו נשמר אמנם כערך מספרי (מספר השניות), אך כדי
לקבוע את ערכה של התכונה חייבים להשתמש במחרוזת טקסט בפורמט GMT. אם קובעים את ערכה של תכונה זו כך שתתאר נקודת זמן שכבר חלפה אז
העוגיה כלל לא תישמר אל תוך הקובץ cookies.txt.
כפי שכבר צוין, אם לא קובעים ערך למאפיין האמור אז העוגיה שנוצרת כלל לא תישמר אל
תוך הקובץ cookies.txt,
והיא תיחשב לעוגיה זמנית שתוקפה פג עם היציאה מהדפדפן.
התכונה path
אם
לא קובעים ערך למאפיין הגישה לעוגיה אז הגישה לנתוניה של העוגיה תתאפשר מכל מסמך
אשר שמור באותה ספריה שבה שמור המסמך אשר יצר את העוגיה. אם רוצים אז ניתן לקבוע
את ערכה של תכונה זו כך שתהיה שווה לספריה אחרת ובכך, למעשה, לקבוע כי הגישה אל
העוגיה שנוצרת תתאפשר ממסמכים ששמורים בספריה האחרת.
התכונה domain
בכל
עוגיה קיימת התכונה domain
אשר משייכת אותה לכתובת מסוימת באינטרנט (המקור של אותה עוגיה). בדרך זו, הגישה
לכל עוגיה ועוגיה מתאפשרת רק אם המסמך שמנסה לגשת אליה אכן הגיע מה-domain של אותה עוגיה. אם לא קובעים את ערכה של תכונה זו אז הערך שניתן
למאפיין domain של העוגיה שיוצרים הוא כתובת ה-URL של האתר שממנו העוגיה הגיעה. כאשר קובעים את ערכו של מאפיין זה יש
לספק את כתובת ה-URL
המלאה או, לפחות, את שתי המלים העיקריות שלה בצירוף נקודה אחת בתחילה ונקודה בין
שתי המלים. לדוגמא: .zindell.com או .microsoft.com
התכונה secure
בכל
עוגיה קיימת התכונה secure
עם הערך true או false.
אם ערכה של התכונה false
(ברירת המחדל) אז הגישה לעוגיה תתאפשר מכל מסמך ששייך לאתר ושעומד בדרישות ה-path וה- domain.
אם ערכה של התכונה true
אז הגישה לעוגיה תתאפשר רק מאותם מסמכים שההרשאה הזו ניתנה להם (יוסבר בהמשך).
קבלת האינפורמציה שמאוחסנת בתוך עוגיה
באמצעות
פקודות ב-javaScript ניתן לקבל בחזרה אך ורק את התחלתה של המחרוזת (שם העוגיה ותוכנה).
את ערכי המאפיינים של העוגיה לא ניתן לקבל בחזרה. הפניה לתכונה cookie
אשר קיימת באובייקט document
כמוה כפנייה למחרוזת התווים שמהווה את שם העוגיה ותוכנה.
התכנית
הבאה (יחד עם שתי התכניות שאחריה) מדגימה כיצד ניתן ליצור עוגיה. המסמך שמוצג
למשתמש קולט ממנו את שמו, ובפעם הבאה שהמסמך מוצגת הודעה מתאימה. התכנית גם עושה
שימוש בתכונה href
אשר קיימת באובייקט location
(ה-reference אליו מוחזק כתכונה של אובייקט ה-document). באמצעות התכונה href
ניתן לשנות את המסמך שמוצג בחלון. הערך של התכונה href הוא ה-URL
של המסמך המוצג. באמצעות שינוי של התכונה href
ל-URL של המסמך שרוצים להציג משנים את המסמך המוצג.
<!-- file name : simpleCookiesDemo.html -->
<!-- 2000(c) Zindell Publishing House Ltd.
-->
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0//EN">
<HTML>
<HEAD>
<TITLE>simpleCookiesDemo.html</TITLE>
<SCRIPT
LANGUAGE="JavaScript1.2">
function checkToGoOn()
{
str=document.cookie;
if
(str.length!=0)
{
document.location.href = "simpleCookiesDemo2.html";
}
else
{
document.location.href = "simpleCookiesDemo1.html";
}
}
checkToGoOn();
</SCRIPT>
</HEAD>
<BODY >
</BODY>
</HTML>
<!-- file name : simpleCookiesDemo1.html -->
<!-- 2000(c) Zindell Publishing House Ltd.
-->
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0//EN">
<HTML>
<HEAD>
<TITLE>simpleCookiesDemo1.html</TITLE>
<SCRIPT
LANGUAGE="JavaScript1.2">
function goOn()
{
setCookie();
document.location.href
= "simpleCookiesDemo2.html";
}
function setCookie()
{
expirationDate = new Date();
expiration =
expirationDate.getTime() + 30*24*60*60*1000;
expirationDate.setTime(expiration);
result =
"simpleCookie=_"+document.myForm.pName.value
+"_"+document.myForm.fName.value+"_;
expires="+expirationDate.toGMTString();
document.cookie = result;
document.myForm.ee.value = expirationDate.toGMTString();
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="myForm">
<BR>
Hi,<BR>
In order to give you the best
possible service, please fill the following text fields.
<BR>
<LABEL>private name :
<INPUT NAME="pName" SIZE="20"></LABEL>
<LABEL>family name : <INPUT
NAME="fName" SIZE="20"></LABEL>
<BR><INPUT
TYPE="button" onClick="goOn()" VALUE="PRESS TO
CONTINUE">
<BR><INPUT
NAME="ee" SIZE="80">
</FORM>
</BODY>
</HTML>
<!-- file name : simpleCookiesDemo2.html -->
<!-- 2000(c) Zindell Publishing House Ltd.
-->
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0//EN">
<HTML>
<HEAD>
<TITLE>simpleCookiesDemo2.html</TITLE>
<SCRIPT
LANGUAGE="JavaScript1.2">
function
setInfo()
{
var str =
document.cookie;
var reg =
/_/;
var vec =
str.split(reg);
var pName =
vec[1];
var fName =
vec[2];
var result =
"<BR>Hi " + pName + " " + fName + ",<BR>How
are you ?";
document.write(result);
}
setInfo();
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
תרגילים
1. כתוב/כתבי דף HTML אשר יציג למשתמש (בפעם הראשונה שבה הוא מבקר באתר) שאלות בנוגע
לפרטיו האישיים (לרבות תחומי העניין שלו-המשתמש יבחר מתוך מספר אפשרויות בחירה אחת
או יותר). בהתאם לתשובותיו תוצגנה (בכל אחת מן הפעמים הבאות שבהן יבקר באתר)
פרסומות מתאימות. הפרסומות המתאימות תופענה בתוך INFRAME אשר יוצג בשורה העליונה.
2000 © All the rights reserved to Haim Michael & Zindell
Publishing House Ltd.
No
parts of the contents of this paper may be reproduced or transmitted in any
form by any means
without
the written permission of the publisher !
This book can be used for personal use only !!!
Brought
to you by Zindell
(http://www.zindell.com)
לנוחיותך, להלן תוכן
העניינים של הספר: