最新的Web開發教程
 

ASP Session對象


會話對象存儲有關用戶會話的信息,或更改設置。


Session對象

當你與你的計算機上的應用程序時,你打開它,做一些更改,然後關閉它。 這很像一個會話。 計算機知道你是誰。 它知道,當你打開應用程序,當你關閉它。 然而,在互聯網上有一個問題:Web服務器不知道你是誰,你做什麼,因為HTTP地址不能保持狀態。

ASP通過為每個用戶創建一個唯一的cookie解決了這個問題。 該cookie被發送到用戶的計算機,它包含識別用戶的信息。 這個接口被稱為Session對象。

Session對象存儲有關用戶會話的信息,或更改設置。

存儲在大約一單一用戶會話對象保持信息的變量,並提供給一個應用程序中的所有頁面。 會話變量中存儲的公共信息是名稱,ID和喜好。 服務器會為每個新用戶一個新的Session對象,當會話過期銷毀Session對象。


什麼時候會話開始?

會話啟動時:

  • 一個新的用戶請求一個ASP文件,並且Global.asa文件包括的Session_OnStart過程
  • 的值被存儲在會話變量
  • 用戶請求一個ASP文件,並且Global.asa文件使用<object>標籤來實例化與會話範圍的對象

什麼時候會話結束?

如果用戶沒有請求或在指定時間內申請刷新頁面的會話結束。 默認情況下,這是20分鐘。

如果你想設置一個超時間隔比默認的更短或更長,使用Timeout屬性。

下面的例子設置為5分鐘超時間隔:

<%
Session.Timeout=5
%>

使用Abandon方法立即結束會話:

<%
Session.Abandon
%>

Note:與會議的主要問題是,當他們應該結束。 我們不知道,如果用戶的最後一個請求是最後一個與否。 所以,我們不知道我們應該如何長時間保持會話"alive" 等待太長時間空閒會話在服務器上使用了資源,但如果會話太快刪除用戶不得不從頭再來,因為服務器已經刪除了所有的信息。 找到合適的超時時間間隔是很困難的!

Tip:只有存儲在會話變量少量的數據!


存儲和檢索會話變量

關於Session對象最重要的事情是,你可以在其中存儲的變量。

下面的例子將設置會話變量username ,以"Donald Duck"和會話變量age"50"

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

當值存儲在一個會話變量就可以從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%>

刪除會話變量

Contents集合包含了所有會話變量。

它能夠除去一個會話變量與Remove方法。

下面的示例刪除會話變量"sale"如果會話變量的值"age"是低於18:

<%
If Session.Contents("age")<18 then
  Session.Contents.Remove("sale")
End If
%>

要刪除會話中的所有變量,使用RemoveAll方法:

<%
Session.Contents.RemoveAll()
%>

遍歷目錄收藏

Contents集合包含了所有會話變量。 您可以遍歷目錄的收集,看看有什麼存儲在它:

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

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

結果:

username
age

如果你不知道的內容集合的項目數,您可以使用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
%>