五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > 8.3 會(huì)話期間信息存儲(chǔ)的Session對(duì)象

8.3 會(huì)話期間信息存儲(chǔ)的Session對(duì)象

文章來源:365jz.com     點(diǎn)擊數(shù):752    更新時(shí)間:2009-09-12 17:12   參與評(píng)論

8.3 會(huì)話期間信息存儲(chǔ)的Session對(duì)象

在ASP中,有兩個(gè)內(nèi)部對(duì)象可以進(jìn)行一些信息存儲(chǔ),他們是Application對(duì)象以及Session對(duì)象,其中Application對(duì)象是對(duì)于整個(gè)應(yīng)用程序期間而言的,他對(duì)于所有訪問網(wǎng)站的用戶來講是共享的,而Session是對(duì)于會(huì)話期間而言的,他僅對(duì)于當(dāng)前用戶存在。

8.8.1 Session對(duì)象簡(jiǎn)介

Session對(duì)象的主要用途是針對(duì)每個(gè)訪問網(wǎng)站的用戶來存儲(chǔ)一些信息,例如,當(dāng)用戶登陸后,我們可以在該用戶的session中存儲(chǔ)信息來標(biāo)識(shí)當(dāng)前用戶已經(jīng)登錄。Session的原理是這樣的:當(dāng)用戶第一次訪問網(wǎng)站時(shí),IIS為這個(gè)用戶分配一個(gè)標(biāo)識(shí),這個(gè)標(biāo)識(shí)是一列很長(zhǎng)的隨機(jī)字符串,這個(gè)隨機(jī)字符串叫做SessionID,而后服務(wù)器將其發(fā)送給客戶端時(shí)期保存在Cookies中,接下來用戶再訪問服務(wù)器上的其他頁面時(shí),服務(wù)器獲得這個(gè)SessionID,并從內(nèi)存中獲取和這個(gè)SessionID相關(guān)的數(shù)據(jù),放在Session對(duì)象的集合中。

8.8.2 Session對(duì)象的方法、屬性和集合

因?yàn)镾ession對(duì)象的方法主要是針對(duì)Session對(duì)象的集合來操作的,因此我們首先來講解Session對(duì)象的集合。

一般來說,我們主要使用的是Session對(duì)象的contents集合,我們可以在這個(gè)集合中存儲(chǔ)當(dāng)前用戶的某些信息,例如,如下代碼:

Session.Contents("username") = "hanguofeng"

則在名為username的session集合中存儲(chǔ)了一個(gè)值為hanguofeng的字符串。

我們從session對(duì)象的集合中檢索數(shù)據(jù)也非常簡(jiǎn)單,只需要直接調(diào)用即可,如:

sUserName = session.contents("username")

即將contents集合中的username元素的值賦值給變量sUserName

Session的contents集合還有一個(gè)簡(jiǎn)便的調(diào)用方法,即,省略contents字樣,例如直接使用session("username")="hanguofeng"來為名為username的元素賦值。一般我們?cè)诮oSession賦值或者獲取Session的值時(shí),都使用簡(jiǎn)便方法。

Session對(duì)象有三個(gè)方法,他們主要是用來刪除Session集合中的數(shù)據(jù)或者放棄當(dāng)前的session的,如下:

l         Contents.Remove("variable_name") 從Session.Content集合中刪除一個(gè)名為variable_name的變量

l         Contents.RemoveAll() 從Session.Content集合中刪除所有變量

l         Abandon() 當(dāng)網(wǎng)頁的執(zhí)行完成時(shí),結(jié)束當(dāng)前用戶會(huì)話并撤消當(dāng)前Session對(duì)象。

Remove和RemoveAll方法的目的都是從Session.Content集合中刪除變量,前者用于刪除一個(gè)指定名稱的變量,例如:

Session.Contents.Remove("username")

可刪除在前面我們?cè)谇懊娼⒌膗sername變量。

Session.Contents.RemoveAll方法將刪除所有的Session集合變量。

而Abandon()方法的作用為撤銷Session對(duì)象,這里Abandon()方法與RemoveAll()方法有什么不同呢。

Abandon()方法使得ASP放棄當(dāng)前的SessionID,并在客戶下次訪問頁面時(shí)重新為該用戶分配一個(gè)SessionID,而RemoveAll()方法僅僅刪除了當(dāng)前的集合,但是客戶仍然使用同一個(gè)SessionID。因此他們實(shí)際體現(xiàn)出的區(qū)別是,在調(diào)用了Abandon()方法后,在當(dāng)前的頁面仍然可以訪問Session集合,在關(guān)閉此頁面并且開啟另一個(gè)頁面后,才會(huì)使得當(dāng)前的Session被刪除。

Session對(duì)象主要有三個(gè)比較常用的屬性,如下列出:

l         CodePage 定義用于在瀏覽器中顯示頁內(nèi)容的代碼頁(Code Page)。

l         SessionID 當(dāng)前Session的SessionID值

l         Timeout 設(shè)定當(dāng)前會(huì)話的超時(shí)周期。

首先來看CodePage屬性,CodePage定義了當(dāng)前頁面輸出內(nèi)容的字符集,這里的字符集以數(shù)字表示,例如,簡(jiǎn)體中文的字符集是936,UTF-8的字符集是65001等,這個(gè)屬性也是為了防止頁面出現(xiàn)亂碼使用的。

SessionID屬性可以獲得當(dāng)前的用戶的SessionID,一般這個(gè)屬性使用的也不是很頻繁,有時(shí)在客戶端瀏覽器不支持cookies的情況下,你可以將SessionID附加在客戶端的QueryString變量中,從而用來標(biāo)識(shí)每個(gè)客戶端。

Timeout屬性的指定用于設(shè)定客戶的Session超時(shí)期??蛻魧?duì)于SessionID并不是長(zhǎng)期占有的,在其一段時(shí)間內(nèi)沒有和服務(wù)器段進(jìn)行任何交互后,服務(wù)器端將放棄該Session,這里的Timeout屬性即是控制這個(gè)超時(shí)時(shí)間的,例如:

Session.Timeout = 5

即將當(dāng)前客戶的Session超時(shí)時(shí)間設(shè)定為5分鐘,這個(gè)超時(shí)時(shí)間默認(rèn)是10分鐘,如果站點(diǎn)的訪問量非常大,那么可以將這個(gè)時(shí)間設(shè)定的短一些,從而及時(shí)放棄那些不活動(dòng)的用戶而節(jié)省站點(diǎn)服務(wù)器的內(nèi)存資源。

8.3.3 小案例—用戶登錄模塊

一般來說,在實(shí)際的編程中,對(duì)于Session對(duì)象使用最多的就是用戶登錄部分使用了,這個(gè)案例將簡(jiǎn)單的模擬一個(gè)用戶登錄表單、用戶是否登錄的判斷以及用戶退出的一系列功能,他一共分為這么幾個(gè)頁面,如圖8.6所示。

圖8.6

l         Login.ASP頁面

在login.ASP頁面中,我們將完成用戶登錄表單的顯示,以及提交表單后,對(duì)于用戶輸入的密碼判斷和寫入session的操作,其代碼如下。

<%

Dim sPassword

If UCase(Request.ServerVariables("REQUEST_METHOD"))="POST" Then     '如果正在提交表單

       sPassword = Trim(Request.Form("password"))

       If sPassword = "hanguofeng" Then

              Session("password") = "hanguofeng"

              Response.Write("您已經(jīng)登錄成功!請(qǐng)?jiān)L問<a href=""check.ASP"">登錄檢測(cè)文件</a>")

       Else

              Response.Write("您輸入的密碼錯(cuò)誤!")

              Response.End()

       End If

Else

       Response.Write("<form method=""post"" action="""">")

Response.Write("請(qǐng)輸入密碼:<input name=""password"" type=""text"" />")

       Response.Write("<input type=""submit"" value=""提交"" />")

       Response.Write("</form>")

End If

%>

和你前面所見的實(shí)例類似的,這個(gè)文件也使用了ServerVariables集合的值來判斷當(dāng)前是提交表單,還是顯示表單。

如果是POST方法請(qǐng)求,說明正在提交表單,那么此時(shí)就需要對(duì)用戶輸入的密碼進(jìn)行判斷,如果用戶輸入的密碼是“hanguofeng”,則此時(shí)進(jìn)入密碼正確的流程,首先設(shè)定名為username的session的值為hanguofeng,而后調(diào)用Response.Write方法輸出登錄成功的字樣。否則首先調(diào)用Response.Write來顯示輸入密碼錯(cuò)誤的字樣,然后使用Response.End()來終止頁面繼續(xù)運(yùn)行。

如果當(dāng)前是GET請(qǐng)求,則調(diào)用Response.Write方法來顯示讓用戶填寫密碼的表單。

l         Check.ASP頁面

在Check.ASP頁面中我們來檢測(cè)用戶的session,從而判斷其是否已經(jīng)登錄,這個(gè)頁面的代碼如下。

<%

Dim sPassword

sPassword = Trim(Session("password"))     '獲取session

If sPassword = "" Then

       Response.Write("您還沒有登錄,請(qǐng)?jiān)L問<a href=""login.ASP"">登錄表單</a>")

Else

       Response.Write("您已經(jīng)登錄,可以訪問<a href=""logout.ASP"">退出頁面</a>")

End If

%>

在這個(gè)文件中,我們首先獲得了名為password的session變量的值,而后調(diào)用Trim()函數(shù)去掉這個(gè)值兩端的空格,而后判斷其是否為空,如果為空,則說明還沒有登錄,否則就說明已經(jīng)登錄了。

l         Logout.ASP頁面

Logout.ASP頁面用于通過Session的Remove方法來清空cookies,從而實(shí)現(xiàn)用戶的退出。本頁面代碼如下:

<%

Session.Contents.Remove("password")

Response.Write("退出成功!")

%>

為什么這里使用了Remove方法而不是RemoveAll方法呢,這是因?yàn)?,我在處理這個(gè)用戶退出的操作時(shí),并不知道用戶是否還在本站點(diǎn)其他部分保存了有用的session信息,如果使用RemoveAll方法,則會(huì)使得那些還有可能用到的信息丟失。

如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (752人查看0條評(píng)論)
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)