ASP Session 物件
Session 物件用於儲存使用者資訊或更改使用者會話的設定。
Session 物件
當你在電腦上使用一個應用程式時,你會開啟它,進行一些更改,然後關閉它。這就像一個 Session。電腦知道你是誰。它知道你何時開啟應用程式以及何時關閉它。然而,在網際網路上有一個問題:Web 伺服器不知道你是誰,也不知道你在做什麼,因為 HTTP 地址不維護狀態。
ASP 透過為每個使用者建立一個唯一的 Cookie 來解決這個問題。Cookie 被髮送到使用者的計算機,它包含識別使用者的資訊。這個介面被稱為 Session 物件。
Session 物件儲存使用者資訊或更改使用者會話的設定。
儲存在 Session 物件中的變數儲存有關單個使用者資訊,並且在同一個應用程式中的所有頁面都可以訪問。通常儲存在會話變數中的資訊包括姓名、ID 和偏好。伺服器為每個新使用者建立一個新的 Session 物件,並在會話過期時銷燬該 Session 物件。
Session 何時開始?
當以下情況發生時,會話開始:
- 新使用者請求一個 ASP 檔案,並且 Global.asa 檔案包含一個 Session_OnStart 過程。
- 將值儲存在 Session 變數中。
- 使用者請求一個 ASP 檔案,並且 Global.asa 檔案使用 <object> 標籤來例項化一個具有會話範圍的物件。
Session 何時結束?
如果使用者在應用程式中沒有請求或重新整理頁面達到指定時間(預設為 20 分鐘),則會話結束。
如果你想設定一個比預設值更短或更長的超時間隔,請使用 Timeout 屬性。
下面的示例將超時間隔設定為 5 分鐘。
<%
Session.Timeout=5
%>
使用 Abandon 方法可以立即結束會話。
<%
Session.Abandon
%>
注意: 會話的主要問題在於何時應該結束。我們不知道使用者的最後一次請求是否是最終請求。因此,我們不知道應該將會話“保持活動”多久。等待一個空閒會話過長時間會佔用伺服器資源,但如果會話過早刪除,使用者將不得不重新開始,因為伺服器已刪除所有資訊。找到正確的超時間隔可能很困難!
提示: 只在會話變數中儲存少量資料!
儲存和檢索 Session 變數
Session 物件最重要的特點是你可以將變數儲存在其中。
下面的示例將 Session 變數 username 設定為“Donald Duck”,並將 Session 變數 age 設定為“50”。
<%
Session("username")="Donald Duck"
Session("age")=50
%>
當值儲存在會話變數中時,可以從 ASP 應用程式中的任何頁面訪問它。
歡迎 <%Response.Write(Session("username"))%>
上面的行返回:“Welcome Donald Duck”。
你也可以將使用者偏好儲存在 Session 物件中,然後訪問該偏好來選擇要返回給使用者的頁面。
如果使用者螢幕解析度較低,下面的示例將指定頁面的純文字版本。
<%If Session("screenres")="low" Then%>
這是頁面的文字版本
<%Else%>
這是頁面的多媒體版本
<%End If%>
移除 Session 變數
Contents 集合包含所有會話變數。
可以使用 Remove 方法移除會話變數。
如果會話變數 "age" 的值小於 18,下面的示例將移除會話變數 "sale"。
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>
要移除會話中的所有變數,請使用 RemoveAll 方法。
<%
Session.Contents.RemoveAll()
%>
迴圈遍歷 Contents 集合
Contents 集合包含所有會話變數。你可以迴圈遍歷 Contents 集合,檢視其中儲存了什麼。
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
下一步
%>
結果
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>")
下一步
%>
結果
Session 變數: 2
Donald Duck
50
迴圈遍歷 StaticObjects 集合
你可以迴圈遍歷 StaticObjects 集合,檢視所有儲存在 Session 物件中的物件的值。
<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>")
下一步
%>