הסבר
כאשר מגיעה בקשה מדףדפן מסויים מכתובת IP מסויימת (תחנה) ASP.NET מפיק עבור הבקשה הזאת מספר חד ערכי ושולח את המספר הזה עם Cookie לתחנה. האופרציה הזאת גורמת לכך שבכל פעם שהדפדפן שולח בקשה (Request) לתחנה ASP.NET מוצא את ה Cookie של ה Session, מוציא את המספר החד ערכי וכך הוא "יודע" מול איזה משתמש הוא עובד. מאיזה משתמש מגיע הבקשה. כל הגשפט הזה נוצר בכדי להתגבר על אחת מהבעיות המטרידות ביותר בתכנות ב web והיא היות ב web מנגנון stateless. כל בקשה עומדת בפני עצמה ואין אפשרות לשמור נתונים בין בקשות. ASP.NET משתמש באותו Session ID ליצור אובייקט עבור כל משתמש בשם Session ובאובייקט זה לשמור נתונים אשר ניתן להשתמש בהם בין קריאות. מכל הסיפור הזה ניתן להבין כי ה Session ID הוא למעשה מזהה של משתמש במערכת. אתה יכול להשתמש בו בכדי לאכסן נתונים במקומות שונים (בסיס נתונים) עבור משתמש מסוים. אבל כמובן, כמו בכל סיפור בכל טוב יש גם רע ... אז 1) Session קיים לתקופת זמן מסוימת שניתן להגדיר אותה (Web.Config) וברירית המחדל היא 20 דקות. הווה אומר אם במשך 20 דקות לא תהיה שום בקשה של המשתמש מהשרת (לא יגיע Request) ה Session מת ובקשה חדשה תיצר ותשלח Cookie עם Session ID חדש. היי אבל שמרתי נתונים בבסיס הנתונים עבור המשתממש הזה, מה עושים ??? יש מה לעשות אבל זה כבר לשאלה אחרת. 2) אחרון אבל
מעצבן. מסתבר שכאשר פותחים חלונות Web חדשים מצד התחנה (window.showmodaldialog לדוגמא) ונפתח חלון החלון הנ"ל נפתח לעיתים תחת Thread אחר של הדפדפן ופעם לא. כל פעם שנפתח חלון כזה תחת דפדפן אחר ב Thread אחר החלון הזה חסר Cookie של Session וכאשר הוא מגיע לשרת הוא "מייצר" Session חדש עבור החלון שנפתח. מצב זה מייצר בעיות רבות משום שמבחינתנו זה אותו משתמש אשר בסך הכל פותח עוד חלון (לעולם הרחב
) רק בכדי לשמור נתונים ב Session של המשתמש אבל הנתונים ישמרו ב Session אחר לגמרי. הבעיה החמורה יותר היא שזה מתרחש "מדי פעם". גם לזה יש פתרונות אבל כמה אפשר לכתוב בתשובה אחת ...