ASP會話
Session 物件用於儲存關於使用者會話(session)的信息,或更改使用者會話(session)的設定。
Session 物件
當您在電腦上操作某個應用程式時,您會開啟它,做些更改,然後關閉它。這很像對話(Session)。計算機知道您是誰。它清楚您在何時打開和關閉應用程式。然而,在網路上問題出現了:由於 HTTP 位址無法保持狀態,Web 伺服器並不知道您是誰以及您做了什麼。
ASP 透過為每個使用者建立一個唯一的 cookie 來解決這個問題。 cookie 傳送到使用者的電腦上,它含有可辨識使用者的資訊。這種介面被稱為 Session 物件。
Session 物件用於儲存關於使用者會話(session)的訊息,或更改使用者會話(session)的設定。
儲存於 Session 物件中的變數儲存單一使用者的信息,並且對於應用程式中的所有頁面都是可用的。儲存於 session 變數中的公共資訊通常是 name、id 和參數。伺服器會為每個新的使用者建立一個新的 Session,並在 session 失效時撤銷掉這個 Session 物件。
Session 何時開始?
Session 開始於:
某個新使用者請求了一個ASP 文件,並且Global.asa 文件引用了Session_OnStart 子程式
-
#某個值儲存在Session 變數中
某個使用者請求了一個ASP 文件,並且Global.asa 使用<object> 標籤透過session 的scope 來實例化某個物件
Session 何時結束?
如果使用者沒有在規定的時間內在應用程式中請求或刷新頁面,session 就會結束。預設值為 20 分鐘。
如果您想要將逾時的時間間隔設定為比預設值更短或更長,可以使用 Timeout 屬性。
下面的實例設定了一個5 分鐘的逾時時間間隔:
Session.Timeout=5
%>
#要立即結束session,請使用Abandon 方法:
Session.Abandon
%>
註解:使用 session 時主要的問題是它們該在何時結束。我們不會知道用戶最近的請求是否是最後的請求。因此我們不清楚該讓 session "存活"多久。為某個空閒的 session 等待太久會耗盡伺服器的資源。然而如果 session 被過早刪除,用戶就必須一遍又一遍地重新開始,這是因為伺服器已經刪除了所有的資訊。尋找合適的超時間隔時間是很困難的!
提示:在 session 變數中只儲存少量的資料!
儲存和取回 Session 變數
Session 物件最大的優點是可在其中儲存變量,以供後續的網頁讀取,其應用範圍是很廣的。
下面的實例把"Donald Duck" 賦值給名為username 的Session 變量,並將"50" 賦值給名為age 的Session 變數:
Session("username")="Donald Duck"
Session("age")=50
%>
#當值被儲存在session 變數中,它就能被ASP 應用程式中的任何頁面使用:
上面這行程式碼回傳的結果是: "Welcome Donald Duck"。
您也可以在 Session 物件中儲存使用者參數,然後透過存取這些參數來決定向使用者傳回哪個頁面。
下面的實例規定,假如使用者使用低顯示器分辨率,則傳回純文字版本的頁面:
This is the text version of the page
<%Else%>
This is the multimedia version of the page
#<%End If%>
移除Session 變數
Contents 集合包含所有的session 變數。
可透過 Remove 方法移除 session 變數。
在下面的實例中,如果session 變數"age" 的值小於18,則移除session 變數"sale":
If Session. Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>
如需移除session 中的所有變量,請使用RemoveAll 方法:
Session.Contents.RemoveAll()
%>
遍歷 Contents 集合
Contents 集合包含所有的 session 變數。您可以透過遍歷Contents 集合,來查看其中儲存的變數:
Session("username")="Donald Duck"
Session("age")= 50
dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
Next
%>
#結果:
age
如果您不知道Contents 集合中的項目數量,您可以使用Count 屬性:
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
Response.Write(Session.Contents(i) & "<br>")
Next
%>
結果:
Donald Duck
50
遍歷StaticObjects 集合
您可以透過遍歷StaticObjects 集合,來查看儲存於Session物件中的所有物件的值:
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>" )
Next
%>