ASP入門(十)-Session對象


在ASP中,有兩個內部對象可以進行一些信息存儲,它們是 Application 對象和 Session 對象,其中 Application 對象是對於整個應用程序期間而言的,它對於所有訪問網站的用戶來講是共享的,而 Session 是對於會話期間而言的,它僅對與當前用戶存在。

Session對象簡介

當您在計算機上操作某個應用程序時,您打開它,做些更改,然后關閉它,就很像一次對話(Session)。計算機知道您是誰,它清楚您在何時打開和關閉應用程序。然而,在因特網上問題出現了,由於HTTP地址無法保持狀態,Web服務器並不知道您是誰以及您做了什么。

Session 對象的主要用途 是針對每個訪問網站的用戶來存儲一些信息,例如,當用戶登錄后,我們可以在該用戶的 Session 中存儲信息來標識當前用戶已經登錄。

Session 的原理是這樣的,當用戶第一次訪問網站時,IIS為這個用戶分配了一個標識,這個標識是一列很長的隨機字符串,這個隨機字符串叫做SessionID,而后服務器將其發送給客戶端時期保存在Cookies中,接下來用戶再訪問服務器上的其他頁面時,服務器獲得這個 SessionID,並從內存中獲取和這個 SessionID 相關的數據,放在 Session對象的集合中。

Contents集合

我們可以在這個集合中存儲當前用戶的某些信息,例如下面的代碼展示了如何存儲和讀取數據:

<%
'名字為username的Session集合中存儲了一個“ZhangSan”字符串
Session.Contents("username") = "ZhangSan"
Dim UserName
'讀取Session中的數據,可以省略Contents
'UserName = Session.Contents("username")和下面一樣
UserName = Session("username")
Response.Write("<h2>" & UserName & "</h2>")
%>

Session對象有三個方法(Contents.RemoveContents.RemoveAllAbandon),用來刪除 Session 集合中的數據或放棄當前的 Session。

第一個例子(SessionContents.asp)我們將演示如何使用 Remove、RemoveAll方法,代碼如下:

...
<h3>當前SessionID值為 <%=Session.SessionID%></h3>
<h3>Session中存儲數據</h3>
<%
'利用 Contents.Count 遍歷 Session 的過程
Sub Traversal_P() 
  Dim i
  For i = 1 To Session.Contents.Count
    Response.Write("Session(""" & Session.Contents.key(i) & """) = " & Session.Contents(i))
    Response.Write("<br>")
  Next
End Sub
'For Each 遍歷 Session.Contents 集合 
Sub Traversal_E()
  Dim x
  For Each x In Session.Contents 
    Response.Write("Session(""" & x & """) = " & Session(x))
    Response.Write("<br>")
  Next
End Sub
'Session.Contents中存儲了多個數據,如下
Session.Contents("username") = "ZhangSan"
Session.Contents("password") = "12345678"
Session.Contents("date")="2015/08/14"
Session.contents("author")="pchmonster"
'遍歷 Contents 集合
Traversal_E()
%>
<hr>
<h3>刪除名為username的數據</h3>
<%
'刪除 username 數據
Session.Contents.Remove("username")
'重新遍歷 Contents 集合
Traversal_P()
%>
<hr>
<h3>刪除所有的Session數據</h3>
<%
'刪除所有的數據
Session.Contents.RemoveAll()
Traversal_E()
%>
...

上面的代碼運行后顯示如下:

20150814001

這些代碼中演示了如何遍歷Session.Contents集合的兩種方法,請仔細看看。

第二個例子SessionAbandon.asp)演示了 Abandon 方法的效果,通過演示,我們看出來 RemoveAll 方法和 Abandon 方法的區別在於 RemoveAll 僅僅刪除了當前的集合,但是客戶還是使用同一個 SessionID(第一個例子中 SessionID 一直保持不變化)。而 Abandon 方法調用后,在當前頁面仍然可以訪問 Session 集合,在關閉頁面或者刷新頁面后,之前的 Session 會被刪除(本例子中 SessionID 會變化)。

代碼如下:

<%
'Abandon的使用后,在當前頁面仍可以訪問Session集合,關閉頁面或刷新后
'會使Session被刪除,SessionID也就會改變
Session.Abandon()
'首先我們要記錄一下SessionID的值,存放到Cookies中
Dim numVisits, SID
Response.Cookies("numVisits").Expires = DateAdd("d", 10, Now)
Response.Cookies("SID").Expires = DateAdd("d", 10, Now)
SID = Request.Cookies("SID")
numVisits = Request.Cookies("numVisits")
If numVisits = "" or SID = "" Then
  '如果是第一次運行該頁面,則記錄當前Sessio nID值
  Response.Cookies("numVisits") = 1
  Response.Cookies("SID") = Session.SessionID
%>
  <h3>您這是第一次訪問該頁面,當前頁面的SessionID為</h3>
  <h2><%=Session.SessionID%></h2>
<%
Else
%>
  <hr>
  <h3>您這是第<%=numVisits%>次訪問該頁面,當前頁面的SessioID為</h3>
  <h2><%=Session.SessionID%></h2>
  <h3>您第一次訪問時的SessionID為</h3>
  <h2><%=Request.Cookies("SID")%></h2>
<%
  numVisits = numVisits + 1
  Response.Cookies("numVisits") = numVisits
End If

%>

第一次運行該頁面,會先記錄當前的 SessionID 到 Cookies 中,如下圖:

20150814002

多次刷新該頁面或重新打開后,因為 Abandon 方法,會使 Session 刪除,SessionID 會一直改變,如下圖:

20150814003


CodePage、SessionID、Timeout 屬性

CodePage 屬性定義了當前頁面輸出內容的字符集,這里的字符集以數字表示。例如

936 表示 Chinese Simplified (GB2312) 簡體中文

950 表示 Chinese Traditional (Big5) 繁體中文

65001 表示 Unicode (UTF-8)

特別說明

<%@CODEPAGE="65001"%>作用於所有靜態的字符串
Response.CodePage, Session.CodePage 作用於所有動態輸出的字符串
Response.CodePage 作用范圍只在於 a single response
Session.CodePage
的作用范圍卻是在 all responses in a session

SessionID 屬性可以獲得當前用戶的 SessionID,有時候在客戶端瀏覽器不支持 Cookies 的情況下,你可以將 SessionID 附加在客戶端的 QueryString 變量中,從而標識每一個客戶端。

Timeout 屬性用於設定客戶的 Session 超時期。客戶對於 SessionID 並不是長期占有的,在其一段時間內沒有和服務器端進行任何交互后,服務器端將放棄該 Session。

下面的代碼(SessionCST.asp)中將演示這個三個屬性的使用方法,代碼如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Session.CodePage = 65001
'作用於所有動態輸出的字符串
%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CodePage、SessionID、TimeOut屬性的應用</title>
</head>
<body>
<h3>當前頁面使用的CodePage是:</h3>
<h2><%=Session.CodePage%></h2>
<hr>
<h3>當前頁面的SessionID是:</h3>
<h2><%=Session.SessionID%></h2>
<hr>
<h3>當前頁面Session默認超時時間為:</h3>
<h2><%=Session.Timeout%>分鍾</h2>
</body>
</html>

運行后,效果如下:

20150814004


示例代碼下載

Session.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM