asp session 對(duì)象
session 對(duì)象用于存儲(chǔ)關(guān)于用戶會(huì)話(session)的信息,或者更改用戶會(huì)話(session)的設(shè)置。
session 對(duì)象
當(dāng)您在計(jì)算機(jī)上操作某個(gè)應(yīng)用程序時(shí),您打開(kāi)它,做些更改,然后關(guān)閉它。這很像一次對(duì)話(session)。計(jì)算機(jī)知道您是誰(shuí)。它清楚您在何時(shí)打開(kāi)和關(guān)閉應(yīng)用程序。然而,在因特網(wǎng)上問(wèn)題出現(xiàn)了:由于 http 地址無(wú)法保持狀態(tài),web 服務(wù)器并不知道您是誰(shuí)以及您做了什么。
asp 通過(guò)為每個(gè)用戶創(chuàng)建一個(gè)唯一的 cookie 來(lái)解決這個(gè)問(wèn)題。cookie 被傳送至用戶的計(jì)算機(jī)上,它含有可識(shí)別用戶的信息。這種接口被稱作 session 對(duì)象。
session 對(duì)象用于存儲(chǔ)關(guān)于用戶會(huì)話(session)的信息,或者更改用戶會(huì)話(session)的設(shè)置。
存儲(chǔ)于 session 對(duì)象中的變量存儲(chǔ)單一用戶的信息,并且對(duì)于應(yīng)用程序中的所有頁(yè)面都是可用的。存儲(chǔ)于 session 變量中的公共信息通常是 name、id 和參數(shù)。服務(wù)器會(huì)為每個(gè)新的用戶創(chuàng)建一個(gè)新的 session,并在 session 失效時(shí)撤銷掉這個(gè) session 對(duì)象。
session 何時(shí)開(kāi)始?
session 開(kāi)始于:
- 某個(gè)新用戶請(qǐng)求了一個(gè) asp 文件,并且 global.asa 文件引用了 session_onstart 子程序
- 某個(gè)值存儲(chǔ)在 session 變量中
- 某個(gè)用戶請(qǐng)求了一個(gè) asp 文件,并且 global.asa 使用 <object> 標(biāo)簽通過(guò) session 的 scope 來(lái)實(shí)例化某個(gè)對(duì)象
session 何時(shí)結(jié)束?
如果用戶沒(méi)有在規(guī)定的時(shí)間內(nèi)在應(yīng)用程序中請(qǐng)求或者刷新頁(yè)面,session 就會(huì)結(jié)束。默認(rèn)值為 20 分鐘。
如果您想要將超時(shí)的時(shí)間間隔設(shè)置為比默認(rèn)值更短或更長(zhǎng),可以使用 timeout 屬性。
下面的實(shí)例設(shè)置了一個(gè) 5 分鐘的超時(shí)時(shí)間間隔:
session.timeout=5
%>
要立即結(jié)束 session,請(qǐng)使用 abandon 方法:
session.abandon
%>
注釋:使用 session 時(shí)主要的問(wèn)題是它們?cè)撛诤螘r(shí)結(jié)束。我們不會(huì)知道用戶最近的請(qǐng)求是否是最后的請(qǐng)求。因此我們不清楚該讓 session "存活"多久。為某個(gè)空閑的 session 等待太久會(huì)耗盡服務(wù)器的資源。然而如果 session 被過(guò)早地刪除,用戶就不得不一遍又一遍地重新開(kāi)始,這是因?yàn)榉?wù)器已經(jīng)刪除了所有的信息。尋找合適的超時(shí)間隔時(shí)間是很困難的!
提示:在 session 變量中僅存儲(chǔ)少量的數(shù)據(jù)!
存儲(chǔ)和取回 session 變量
session 對(duì)象最大的優(yōu)點(diǎn)是可在其中存儲(chǔ)變量,以供后續(xù)的網(wǎng)頁(yè)讀取,其應(yīng)用范圍是很廣的。
下面的實(shí)例把 "donald duck" 賦值給名為 username 的 session 變量,并把 "50" 賦值給名為 age 的 session 變量:
session("username")="donald duck"
session("age")=50
%>
當(dāng)值被存儲(chǔ)在 session 變量中,它就能被 asp 應(yīng)用程序中的任何頁(yè)面使用:
上面這行代碼返回的結(jié)果是: "welcome donald duck"。
您也可以在 session 對(duì)象中存儲(chǔ)用戶參數(shù),然后通過(guò)訪問(wèn)這些參數(shù)來(lái)決定向用戶返回什么頁(yè)面。
下面的實(shí)例規(guī)定,假如用戶使用低顯示器分辨率,則返回純文本版本的頁(yè)面:
this is the text version of the page
<%else%>
this is the multimedia version of the page
<%end if%>
移除 session 變量
contents 集合包含所有的 session 變量。
可通過(guò) remove 方法來(lái)移除 session 變量。
在下面的實(shí)例中,如果 session 變量 "age" 的值小于 18,則移除 session 變量 "sale":
if session.contents("age")<18 then
session.contents.remove("sale")
end if
%>
如需移除 session 中的所有變量,請(qǐng)使用 removeall 方法:
session.contents.removeall()
%>
遍歷 contents 集合
contents 集合包含所有的 session 變量。您可以通過(guò)遍歷 contents 集合,來(lái)查看其中存儲(chǔ)的變量:
session("username")="donald duck"
session("age")=50
dim i
for each i in session.contents
response.write(i & "<br>")
next
%>
結(jié)果:
age
如果您不知道 contents 集合中的項(xiàng)目數(shù)量,您可以使用 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
%>
結(jié)果:
donald duck
50
遍歷 staticobjects 集合
您可以通過(guò)遍歷 staticobjects 集合,來(lái)查看存儲(chǔ)在 session 對(duì)象中的所有對(duì)象的值:
dim i
for each i in session.staticobjects
response.write(i & "<br>")
next
%>