HTTP הינו stateless
protocol, כלומר בכל פעם שלקוח מקבל דף מסמך הוא פותח
HTTP connection נפרד לשרת ה-Web, השרת אינו
שומר מידע אודות הלקוח. הדבר נכון גם לשרתים התומכים בקשרי HTTP
מתמידים. החוסר בתמיכה מובנית לתחזוקת context information
גורם למספר קשיים. לדוגמא, כאשר לקוח בחנות מקוונת מוסיף פריט לרשימת הקניות כיצד
ידע השרת מה נכלל כבר ברשימה, או כאשר הלקוח מגיע לדף המאפשר ביצוע תשלום כיצד ידע
השרת אילו פרטים ביקש לרכוש.
לפני Servlet sessions היו הפתרונות הבאים
לבעיה זו: cookies, שכתוב של כתובת
URL ושדות טופס נסתרים.
Cookies
cookies
הינם פיסות מידע טקסטואלי ששרת ה-Web שולח לדפדפן והוא
מחזירם ללא שינוי בעת הביקור הבא באותו אתר. באמצעותם ניתן לאחסן מידע אודות
session וכל קשר הנובע מכך יכול לחפש את ה-session
הנוכחי ולחלץ מידע אודות ה-session ממקום מסוים על מחשב
השרת. לאחר מכן בדרישות נוספות השרת יכול להשתמש ב-hash table
שהוא מתחזק כדי לקשר בין session id ל-cookie
המתאים. זוהי הגישה הנפוצה לטיפול
ב-sessions אולם קיימים מספר חסרונות לשיטה זו:
חלק מהמשתמשים מבטלים את אפשרות השימוש ב-cookies לשם
הגנת הפרטיות. חסרון נוסף הוא שהתחזוקה והמעקב על cookies
נעשים ברמת ממשק נמוכה.
שכתוב כתובת URL
בגישה זו הלקוח מצרף מספר נתונים לסופה של כל כתובת
URL המזהים את
ה-session
ואילו השרת משווה את נתוני הזיהוי עם נתוני ה-session
שאוחסנו על ידו. יתרונו של פתרון זה הוא שהוא פועל גם בדפדפנים שאינם תומכים
ב-cookies או שהמשתמש הפך את ה-cookie ללא זמין. עם זאת
לפתרון זה אותם בעיות כמו ל-cookies, כלומר על תוכנת צד
השרת לבצע פעולות תחזוקה וחישוב רבות. בנוסף יש לדעת שכאשר המשתמש עוזב את ה-session
וחוזר דרך bookmark או קישור, מידע ה-session
עלול להיאבד.
שדות טופס נסתרים
טפסי HTML יכולים להכיל שדות שיהיו נסתרים
למשתמש. בשדות נסתרים אלו ניתן לאחסן מידע אודות
ה-sessions. חיסרון בולט של שיטה זו הוא שהיא פועלת רק בדפים הנוצרים דינאמית.
מעקב sessions ב-Servlets
Servlets מספקים ממשק ברמה גבוהה למעקב
אחרי sessions הבנויים על גבי cookies
או שכתוב URL. למעשה רוב השרתים משתמשים ב-cookies במידה והדפדפן תומך בהם ומשנים אוטומטית את מעקב
ה-sessions לשיטת שכתוב URL
אם ה-cookies אינם נתמכים או שבוטלו במפורש. מפתח ה-Servlet אינו צריך להטריד עצמו בטיפול בפרטים ואינו צריך
להפעיל ישירות cookies או להוסיף מידע לכתובת ה-URL אלא הוא מקבל מקום נוח לאחסון אובייקטי תיווך
הקשורים ל-sessions.
|