ASP編程入門進(jìn)階(八):內(nèi)置對象Session
更新時間:2007年01月03日 00:00:00 作者:
ASP對象中除了用于發(fā)送(Response)、接收和處理數(shù)據(jù)(requeest)、服務(wù)器訪問(Server)的對象外,還有一些非常實用的標(biāo)記Active Server應(yīng)用程序(Application)和單個用戶信息(Session)的對象。
Session對象
該對象在ASP使用中占相當(dāng)大的比例。由于網(wǎng)頁是一種無狀態(tài)程序,無法得知用戶瀏覽狀態(tài)。在ASP中,通過Session對象來記錄使用者私有的數(shù)據(jù)變量,以作為用戶再次對服務(wù)器提出要求時做確認(rèn),用戶在程序的Web頁面之間跳轉(zhuǎn)時,存在Session對象中的變量將不會消失。
這些真的是很重要的功能,尤其是有會員的系統(tǒng)必須要用到的。像是會員的登入賬號、時間、狀態(tài)以及許許多多該記錄的實時數(shù)據(jù)(如購物系統(tǒng)記錄使用者的購物籃內(nèi)的商品),這些信息屬于各使用者私人所需要,通常開發(fā)者都是使用 Session 記錄處理。
在ASP中的Session是使用Cookies構(gòu)成,服務(wù)器將所有的Session內(nèi)記錄的數(shù)據(jù),以Cookies的方式傳至用戶的瀏覽器。通常一般瀏覽器會將這些Cookies存起來,每當(dāng)使用者點選連結(jié),再次與服務(wù)器做聯(lián)機(jī)時,瀏覽器就會把這些Cookies傳回Server供做處理:這即是Session的運作原理。由此可知會話狀態(tài)Session僅在支持cookie的瀏覽器中保留,如果客戶關(guān)閉了Cookie 選項Session也就不能發(fā)揮作用了。
一、Session.SessionID
SessionID 屬性返回用戶的會話標(biāo)識。在創(chuàng)建會話時,服務(wù)器會為每一個會話生成一個單獨的標(biāo)識,會話標(biāo)識以長整形數(shù)據(jù)類型返回。在很多情況下 SessionID 可以用于 WEB 頁面注冊統(tǒng)計。
利用該屬性可以解決一種對用戶的控制問題。該問題的主要功能就是,針對某個網(wǎng)站的一個模塊,當(dāng)一個會員登錄后正在看此模塊時,另一個人用同樣的會員名登錄,就不能瀏覽這個模塊:也就是說一個會員名同時只能一個人瀏覽此模塊。
通過用會員名(假設(shè)為UserID,唯一)和SessionID來實現(xiàn)了控制。當(dāng)會員登錄時,給這個會員一個Session記錄登錄狀態(tài)如:Session("Status")="Logged",同時把這個會員的Session.SessionID寫入數(shù)據(jù)庫。當(dāng)他要瀏覽此模塊時,先判斷其是否登錄,若已經(jīng)登錄再判斷它的SessionID是否與數(shù)據(jù)庫記錄的相同,如果不同則不能訪問。
這樣,當(dāng)另一個用戶用相同的會員名登錄時,那么數(shù)據(jù)庫中記錄的就是新的SessionID,前者訪問此模塊時就不能通過檢查。這就實現(xiàn)了一個會員名同時只能一個人瀏覽某個模塊。這個功能在一些收費網(wǎng)站有很有特別作用,它防止了一個會員名給多個人瀏覽的問題,為公司保障了利益。
二、Session.TimeOut
該屬性設(shè)置的Session的最大間隔時間。間隔時間是指客戶器端從最近一次向Web服務(wù)器提出要求,到下一次向Web服務(wù)器提出要求的時間??梢岳斫鉃椋喝绻脩粼谠摮瑫r時限之內(nèi)不刷新或請求網(wǎng)頁,則該會話將終止。Timeout 屬性是以分鐘為單位,為該應(yīng)用程序的Session對象指定超時時限的,一般默認(rèn)為20分鐘。這在網(wǎng)吧等公共場所,登錄個人信息頁而忘記關(guān)閉窗口時,顯得比較重要(至少可以把時間設(shè)短些)。
以上SessionId、TimeOut屬于Session對象的兩個屬性,下面看該對象的一個方法Abandon
三、Session.Abandon
該方法是Session對象的唯一方法,可以清除Session對象,用來消除用戶的Session對象并釋放其所占的資源。當(dāng)然你如果沒有明確調(diào)用Abandon方法,一旦會話超時,服務(wù)器也會將刪除這些對象并釋放資源。
下面就用兩個頁的程序來認(rèn)識Session對象以及Abandon方法的利用。
1,login.asp
注意Session("name")為空和不為空的時候,都做了一個到info.asp的鏈接,具體調(diào)試結(jié)果如何,再來看info.asp的內(nèi)容。
2,info.asp
可以看出來,info.asp頁面內(nèi)容的顯示其實是需要條件的。那就是必須得有一個session值的存在,這樣才可以顯示具體的信息。這在登錄系統(tǒng)中運用得比較多。
你可以把login.asp想象成一個登錄窗口,當(dāng)然我的這個比較簡單(只要輸入用名和密碼就生產(chǎn)Session了),實際情況是:判斷輸入的用名和密碼是否和數(shù)據(jù)庫中的用名和密碼吻合,如果正確吻合才生成Session的。然info.asp頁面的作用剛好可以做為一權(quán)限頁面,因為進(jìn)入該頁需要Session,而Session的產(chǎn)生是確保用名密碼正確的。
所以當(dāng)一開始出現(xiàn)表單窗口時,你點login.asp鏈接是打不開的,只有當(dāng)提交了表單生成了Session后才能進(jìn)入。這正是登錄系統(tǒng)的精髓所在,Do You Know?:)
四、Session_OnStart
Session_OnStart屬于Session對象的一類事件。它是在服務(wù)器創(chuàng)建新會話時發(fā)生的。服務(wù)器在執(zhí)行請求的頁之前先處理該腳本。Session_OnStart 事件是設(shè)置會話期變量的最佳時機(jī),因為在訪問任何頁之前都會先設(shè)置它們。
對象的例程每一次啟動時觸發(fā)Session_OnStart事件,然后運行Session_Onstart事件的處理過程。也就是說,當(dāng)服務(wù)器接收到應(yīng)用程序中的URL的HTTP請求時,觸發(fā)此事件,并建立一個Session對象。
當(dāng)然說到Session_OnStart事件就不能不談到一個文件Global.asa(P.S:我打算把該文件和Chat程序放在一起說的,所以現(xiàn)在先不作過多解釋)
具體用法先透露,寫在Global.asa文件內(nèi)部
五、Session_OnEnd
一看也就知道是Session對象的另一類事件了。當(dāng)調(diào)用Session.Abandon方法時或者在TimeOut的時間內(nèi)沒有刷新,這會觸發(fā)Session_OnEnd事件,然后執(zhí)行里面的腳本。同樣具體用法在后面將寫的Global.asa文件專題中詳細(xì)介紹到,簡單語法如下:
最后,不知道大家有沒有玩過這樣的一個程序:很令人討厭的,讓你永遠(yuǎn)關(guān)不掉的程序頁面。
只做程序調(diào)試,不要去作弄別人。
以下文件保存為bug.html
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點擊運行]
發(fā)現(xiàn)該文件關(guān)不了了?(當(dāng)然你要關(guān)閉,把源代碼修改下)
那現(xiàn)在的要求是:計算關(guān)閉的次數(shù),如果超過多少次就可以自行關(guān)閉,那下面就采用到session
以下文件保存為bug.asp
呵呵,當(dāng)你關(guān)閉三次以后,窗口就再也不彈出了。了解吧:)
以上就是對Session對象的系統(tǒng)學(xué)習(xí)。
Session對象
該對象在ASP使用中占相當(dāng)大的比例。由于網(wǎng)頁是一種無狀態(tài)程序,無法得知用戶瀏覽狀態(tài)。在ASP中,通過Session對象來記錄使用者私有的數(shù)據(jù)變量,以作為用戶再次對服務(wù)器提出要求時做確認(rèn),用戶在程序的Web頁面之間跳轉(zhuǎn)時,存在Session對象中的變量將不會消失。
這些真的是很重要的功能,尤其是有會員的系統(tǒng)必須要用到的。像是會員的登入賬號、時間、狀態(tài)以及許許多多該記錄的實時數(shù)據(jù)(如購物系統(tǒng)記錄使用者的購物籃內(nèi)的商品),這些信息屬于各使用者私人所需要,通常開發(fā)者都是使用 Session 記錄處理。
在ASP中的Session是使用Cookies構(gòu)成,服務(wù)器將所有的Session內(nèi)記錄的數(shù)據(jù),以Cookies的方式傳至用戶的瀏覽器。通常一般瀏覽器會將這些Cookies存起來,每當(dāng)使用者點選連結(jié),再次與服務(wù)器做聯(lián)機(jī)時,瀏覽器就會把這些Cookies傳回Server供做處理:這即是Session的運作原理。由此可知會話狀態(tài)Session僅在支持cookie的瀏覽器中保留,如果客戶關(guān)閉了Cookie 選項Session也就不能發(fā)揮作用了。
一、Session.SessionID
SessionID 屬性返回用戶的會話標(biāo)識。在創(chuàng)建會話時,服務(wù)器會為每一個會話生成一個單獨的標(biāo)識,會話標(biāo)識以長整形數(shù)據(jù)類型返回。在很多情況下 SessionID 可以用于 WEB 頁面注冊統(tǒng)計。
利用該屬性可以解決一種對用戶的控制問題。該問題的主要功能就是,針對某個網(wǎng)站的一個模塊,當(dāng)一個會員登錄后正在看此模塊時,另一個人用同樣的會員名登錄,就不能瀏覽這個模塊:也就是說一個會員名同時只能一個人瀏覽此模塊。
通過用會員名(假設(shè)為UserID,唯一)和SessionID來實現(xiàn)了控制。當(dāng)會員登錄時,給這個會員一個Session記錄登錄狀態(tài)如:Session("Status")="Logged",同時把這個會員的Session.SessionID寫入數(shù)據(jù)庫。當(dāng)他要瀏覽此模塊時,先判斷其是否登錄,若已經(jīng)登錄再判斷它的SessionID是否與數(shù)據(jù)庫記錄的相同,如果不同則不能訪問。
這樣,當(dāng)另一個用戶用相同的會員名登錄時,那么數(shù)據(jù)庫中記錄的就是新的SessionID,前者訪問此模塊時就不能通過檢查。這就實現(xiàn)了一個會員名同時只能一個人瀏覽某個模塊。這個功能在一些收費網(wǎng)站有很有特別作用,它防止了一個會員名給多個人瀏覽的問題,為公司保障了利益。
<%=Session.SessionId%> 是單獨生成的唯一ID標(biāo)識,可刷新調(diào)試。 |
二、Session.TimeOut
該屬性設(shè)置的Session的最大間隔時間。間隔時間是指客戶器端從最近一次向Web服務(wù)器提出要求,到下一次向Web服務(wù)器提出要求的時間??梢岳斫鉃椋喝绻脩粼谠摮瑫r時限之內(nèi)不刷新或請求網(wǎng)頁,則該會話將終止。Timeout 屬性是以分鐘為單位,為該應(yīng)用程序的Session對象指定超時時限的,一般默認(rèn)為20分鐘。這在網(wǎng)吧等公共場所,登錄個人信息頁而忘記關(guān)閉窗口時,顯得比較重要(至少可以把時間設(shè)短些)。
<%Session.TimeOut=10%> |
以上SessionId、TimeOut屬于Session對象的兩個屬性,下面看該對象的一個方法Abandon
三、Session.Abandon
該方法是Session對象的唯一方法,可以清除Session對象,用來消除用戶的Session對象并釋放其所占的資源。當(dāng)然你如果沒有明確調(diào)用Abandon方法,一旦會話超時,服務(wù)器也會將刪除這些對象并釋放資源。
下面就用兩個頁的程序來認(rèn)識Session對象以及Abandon方法的利用。
1,login.asp
<% '是提取url中變量loginout的值是否為true,若為真,就執(zhí)行Session.Abandon()。 if Request.QueryString("loginout")="true" then Session.Abandon() end if '只有在當(dāng)點擊了submit按鈕的前提下,再來判斷提取的東西都不為空,則建立Session對象。 submitname=request.form("submit1") if submitname="submit" then if Request.Form("name")<>"" and Request.Form("pwd")<>"" then Session("name")=Request.Form("name") Session("pw")=Request.Form("pwd") end if end if %> <% '如果Session("name")不為空,則顯示Session("name")的值,并且做一個到info.asp的鏈接。 if Session("name")<>"" then response.write("你的name值是:"&Session("name")) response.write("<br><a href='info.asp'>顯示你的資料</a>") else '否則,即Session("name")為空不存在,則顯示表單用以輸入建立Session的平臺。 %> <form action="login.asp" method="post"> 姓名:<input type="text" name="name"><br> 密碼:<input type="password" name="pwd"><br> <input type="submit" value="submit" name="submit1"> </form> <!--同樣做了一個到info.asp的鏈接。--> <a href="info.asp">顯示你的資料</a> <%end if%> |
注意Session("name")為空和不為空的時候,都做了一個到info.asp的鏈接,具體調(diào)試結(jié)果如何,再來看info.asp的內(nèi)容。
2,info.asp
<% '如果session對象值為空則跳轉(zhuǎn)到login.asp if session("name")="" then Response.Redirect("login.asp") '否則就顯示個人信息 else Response.Write("你的姓名:"&session("name")&"<br>") Response.Write("你的密碼:"&session("pw")&"<br>") end if %> <a href="login.asp">返回</a> <a href="login.asp?loginout=true">退出</a> |
可以看出來,info.asp頁面內(nèi)容的顯示其實是需要條件的。那就是必須得有一個session值的存在,這樣才可以顯示具體的信息。這在登錄系統(tǒng)中運用得比較多。
你可以把login.asp想象成一個登錄窗口,當(dāng)然我的這個比較簡單(只要輸入用名和密碼就生產(chǎn)Session了),實際情況是:判斷輸入的用名和密碼是否和數(shù)據(jù)庫中的用名和密碼吻合,如果正確吻合才生成Session的。然info.asp頁面的作用剛好可以做為一權(quán)限頁面,因為進(jìn)入該頁需要Session,而Session的產(chǎn)生是確保用名密碼正確的。
所以當(dāng)一開始出現(xiàn)表單窗口時,你點login.asp鏈接是打不開的,只有當(dāng)提交了表單生成了Session后才能進(jìn)入。這正是登錄系統(tǒng)的精髓所在,Do You Know?:)
四、Session_OnStart
Session_OnStart屬于Session對象的一類事件。它是在服務(wù)器創(chuàng)建新會話時發(fā)生的。服務(wù)器在執(zhí)行請求的頁之前先處理該腳本。Session_OnStart 事件是設(shè)置會話期變量的最佳時機(jī),因為在訪問任何頁之前都會先設(shè)置它們。
對象的例程每一次啟動時觸發(fā)Session_OnStart事件,然后運行Session_Onstart事件的處理過程。也就是說,當(dāng)服務(wù)器接收到應(yīng)用程序中的URL的HTTP請求時,觸發(fā)此事件,并建立一個Session對象。
當(dāng)然說到Session_OnStart事件就不能不談到一個文件Global.asa(P.S:我打算把該文件和Chat程序放在一起說的,所以現(xiàn)在先不作過多解釋)
具體用法先透露,寫在Global.asa文件內(nèi)部
<SCRIPT RUNAT=Server Language=VBScript> ....... Sub Session_OnStart ....... End Sub ....... </SCRIPT> |
五、Session_OnEnd
一看也就知道是Session對象的另一類事件了。當(dāng)調(diào)用Session.Abandon方法時或者在TimeOut的時間內(nèi)沒有刷新,這會觸發(fā)Session_OnEnd事件,然后執(zhí)行里面的腳本。同樣具體用法在后面將寫的Global.asa文件專題中詳細(xì)介紹到,簡單語法如下:
<SCRIPT RUNAT=Server Language=VBScript> ....... Sub Session_OnEnd ....... End Sub ....... </SCRIPT> |
最后,不知道大家有沒有玩過這樣的一個程序:很令人討厭的,讓你永遠(yuǎn)關(guān)不掉的程序頁面。
只做程序調(diào)試,不要去作弄別人。
以下文件保存為bug.html
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點擊運行]
發(fā)現(xiàn)該文件關(guān)不了了?(當(dāng)然你要關(guān)閉,把源代碼修改下)
那現(xiàn)在的要求是:計算關(guān)閉的次數(shù),如果超過多少次就可以自行關(guān)閉,那下面就采用到session
以下文件保存為bug.asp
<%if session("num") < 2 then%> <body onunload=javascript:window.open("bug.asp")> <%session("num")=session("num")+1%> <%else%> <script> self.close() </script> <%end if%> |
呵呵,當(dāng)你關(guān)閉三次以后,窗口就再也不彈出了。了解吧:)
以上就是對Session對象的系統(tǒng)學(xué)習(xí)。
相關(guān)文章
asp中Request.ServerVariables的參數(shù)集合
這篇文章主要介紹了asp中Request.ServerVariables的參數(shù)集合,需要的朋友可以參考下2020-02-02ASP編程入門進(jìn)階(八):內(nèi)置對象Session
ASP編程入門進(jìn)階(八):內(nèi)置對象Session...2007-01-01