ASP Session 對象
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
%>