在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.Remove、Contents.RemoveAll、Abandon),用來刪除 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>") NextEnd 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>") NextEnd 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()%>...
上面的程式碼執行後顯示如下:
這些程式碼中示範如何遍歷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") = numVisitsEnd If%>
第一次執行該頁面,會先記錄目前的SessionID 到Cookies 中,如下圖:
多次刷新該頁面或重新開啟後,因為Abandon 方法,會使Session 刪除,SessionID 會一直改變,如下圖:
CodePage、SessionID、Timeout 屬性
CodePage 屬性定義了目前頁面輸出內容的字元集,這裡的字元集以數字表示。例如
936 表示 Chinese Simplified (GB2312) 簡體中文
950 表示 Chinese Traditional (Big5) 繁體中文
#65001 Traditional (Big5) 繁體中文
#65001 #特別說明
<%@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>
运行后,效果如下:
【相关推荐】
1. ASP免费视频教程
以上是介紹ASP中Session物件的三種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!