מדריך ASP – האובייקט Session

Sesion
אוספים (Collections)תכונות (Properties)שיטות (Methods)ארועים (Events)
ContentsCodePageAbandonOnStart
StaticObjectsLCID OnEnd
 SessionID  
 Timeout  

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

לדוגמא, אם נכתוב את השורה:

<% Session("x")=now() %> 

ניצור משתנה המחזיק את השעה בה נצפה הדף, עבור כל משתמש. למשתמשים שונים תהיה שעה שונה מאוכסנת בתוך ("Session("x.

אורך החיים של אובייקט ה-Session

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

20 דקות לאחר הבקשה האחרונה של המשתמש לראות דף השייך לאפליקציה, או כאשר אנו קוראים למתודה Session.Abandon.

Session.Abandon


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

<%Session.Abandon%>

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

<%@EnableSessionState=false%>

Session.TimeOut


כאמור, ברירת המחדל לסיום Session היא 20 דקות לאחר הבקשה האחרונה של המשתמש לצפייה בדף מסויים. ע"י Session.Timeout באפשרותינו לשנות ערך זה.

<%Session.Timeout=5%>

קובע את הערך ל-5 דקות.

Session.SessionID


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

Session.CodePage


"CodePage" הינו מספר המציין טבלה פנימית המשמשת את מערכת ההפעלה כדי למפות סימנים
(אותיות, מספרים, סימני ניקוד ופיסוק…) למספר התו. CodePages שונים מספקים תמיכה לשפות
שונות. כדי לקבוע את שפת ברירת המחדל לקובץ מסויים, נכתוב בראש הדף את השורה

<%@codepage=1255 %>

שורה זו, למשל, קובעת את שפת הדף לעברית.
כדי לקבוע את השפה ל-Session ספציפי, נכתוב

<%Session.CodePage=1255 %>

כדי לקבוע את השפה בצד הלקוח (הדפדפן) נשתמש בתג ה-META:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1255">

Session.LCID


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

<%@lcid=1037 %>

שורה זו, למשל, קובעת את ה-locale לעברית.
כדי לקבוע אותו ל-Session ספציפי, נכתוב:

<% Session.LCID=1037 %>

Session.Contents


זהו אוסף כל המשתנים אשר הוספו לאובייקט ה-Session באמצעות הקוד.
כדי להוסיף משתנה נכתוב:

<% Session("Name")=value %>

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

VBScriptJScript

<% 
    Dim name
    name = Request.Form("name")
    Session("Name")=name
%>


<% 
    var name = Request.Form("name")()
    Session("Name")=name
%> 

("Session("name מכיל את שם המשתמש כמו שהוא התקבל מהטופס, עכשיו נוכל להציג את שמו של המשתמש בכל דף באפליקציה.
אם זהו הדף ShowMyName.asp:

Your name is: <%=Session("Name")%>

כאשר moshe יראה את הדף, על המסך שלו יוצג
"Your name is moshe"
וכאשר david יראה את הדף, יוצג
"Your name is david."
כדי למחוק את המשתנה מהאוסף, נכתוב:

<% Session.Contents.Remove("name") %>

וכדי למחוק את כל תכולת האוסף:

<% Session.Contents.RemoveAll %>

Session.StaticObjects


הוא אוסף כל המשתנים שנוצרו ב-Session באמצעות התג <OBJECT> (ולא באמצעות Server.CreateObject).

Session_OnStart ו- Session_OnEnd


שתי רוטינות אלו ממוקמות בקובץ Global.asa, עליו נדון בפרק הבא.

Session_OnStart מופעלת בפעם הראשונה בה המשתמש מבקש מהשרת דף השייך לאפליקציה. השרת מעבד את הרוטינה לפני עיבוד הדף המבוקש.

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

VBScriptJScript

<script runat="server" language="vbscript">
    Sub Session_OnStart
     startPage = "/MyApp/StartHere.asp"
     currentPage = Request.ServerVariables("SCRIPT_NAME")
     if strcomp(currentPage,startPage,1) then
         Response.Redirect(startPage)
     end if
    End Sub
</script>


<script runat="server" language="jscript">
    function Session_OnStart(){
     var startPage = "/MyApp/StartHere.asp"
     var currentPage = Request.ServerVariables("SCRIPT_NAME")
     if (startPage!=currentPage)
         Response.Redirect(startPage)
   }
</script>

הסבר:
startPage מכיל את הנתיב הוירטואלי לדף שאנו רוצים שיהיה הראשון שכל גולש יראה באפליקציה.
currentPage מכיל את הדף הנוכחי, ממנו הופעלה הרוטינה Session_OnStart (כלומר, הדף הראשון בפועל שהמשתמש נכנס אליו).
אנו משווים בין שני המשתנים, ואם הם לא שווים, כלומר, הדף הראשון שהמשתמש ביקש, הוא לא הדף שאנו רוצים שיראה ראשון, אנו מנתבים את המשתמש, באמצעות Response.Redirect , לדף הרצוי לנו.

Session_OnEnd
מתבצעת כאשר אנו קוראים למתודה Session.Abandon, או כאשר ה-timeout נגמר.

הערה:
אין אפשרות לקרוא למתודה Server.MapPath, או לבצע פעולות על בסיס נתונים בתוך Session.OnEnd.

תגיות: , , , ,

תגובות בפייסבוק