Latest web development tutorials

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 被過早地刪除,用戶就不得不一遍又一遍地重新開始,這是因為服務器已經刪除了所有的信息。 尋找合適的超時間隔時間是很困難的!

Tip提示:在session變量中僅存儲少量的數據!


存儲和取回Session 變量

Session 對象最大的優點是可在其中存儲變量,以供後續的網頁讀取,其應用範圍是很廣的。

下面的實例把"Donald Duck"賦值給名為username的Session變量,並把"50"賦值給名為age的Session變量:

<%
Session("username")="Donald Duck"
Session("age")=50
%>

當值被存儲在session 變量中,它就能被ASP 應用程序中的任何頁面使用:

Welcome <%Response.Write(Session("username"))%>

上面這行代碼返回的結果是: "Welcome Donald Duck"。

您也可以在Session 對像中存儲用戶參數,然後通過訪問這些參數來決定向用戶返回什麼頁面。

下面的實例規定,假如用戶使用低顯示器分辨率,則返回純文本版本的頁面:

<%If Session("screenres")="low" Then%>
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
%>

結果:

username
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
%>

結果:

Session variables: 2
Donald Duck
50


遍歷StaticObjects 集合

您可以通過遍歷StaticObjects 集合,來查看存儲在Session 對像中的所有對象的值:

<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>")
Next
%>