[摘 要] 闡述了Session對(duì)象的作用及應(yīng)用方法,指出了Session對(duì)象的特點(diǎn),并在此基礎(chǔ)上給出了Session對(duì)象的幾個(gè)應(yīng)用實(shí)例。最后對(duì)Session對(duì)象的局限性作出了分析。
[關(guān)鍵詞] ASP對(duì)象 ASP程序設(shè)計(jì) Session對(duì)象
ASP是目前廣泛使用的動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù),很多電子商務(wù)網(wǎng)站都使用ASP技術(shù)進(jìn)行開(kāi)發(fā)。在電子商務(wù)網(wǎng)站開(kāi)發(fā)和運(yùn)行中,防止非法用戶登錄,保存登錄用戶信息和用戶購(gòu)物信息,在網(wǎng)站的各頁(yè)間共享信息,是網(wǎng)站必須具備的功能。這些功能可以通過(guò)ASP的Session對(duì)象和Session數(shù)組實(shí)現(xiàn)。
本文結(jié)合實(shí)例,介紹利用Session對(duì)象在網(wǎng)站開(kāi)發(fā)中保存、傳遞登錄用戶信息以及利用Session數(shù)組同時(shí)保存、傳遞多個(gè)信息的方法。
一、Session對(duì)象
1.Session對(duì)象的作用
Session對(duì)象是ASP的內(nèi)置對(duì)象之一,負(fù)責(zé)記載單個(gè)用戶的信息。不同用戶的信息用不同的Session對(duì)象記載。Session對(duì)象最大的特點(diǎn)是,Session一旦被創(chuàng)建,網(wǎng)站中各頁(yè)都可以讀取它。Session對(duì)象又稱為會(huì)話級(jí)對(duì)象,當(dāng)一個(gè)用戶訪問(wèn)網(wǎng)站時(shí),即啟動(dòng)了一個(gè)Session對(duì)象,即使該用戶在網(wǎng)站的各頁(yè)間跳轉(zhuǎn)時(shí),該Session信息一直存在,網(wǎng)站的任何一個(gè)頁(yè)面都可以讀取它,直至該用戶離開(kāi)網(wǎng)站。
Session對(duì)象有有效期,一般為20分鐘。當(dāng)用戶離開(kāi)網(wǎng)站或在Session有效期內(nèi)不再點(diǎn)擊網(wǎng)站的任何內(nèi)容時(shí),該Session對(duì)象會(huì)自動(dòng)被刪除。
2. Session對(duì)象的創(chuàng)建與讀取
可以把登錄用戶的用戶名、密碼等信息存儲(chǔ)在Session中。創(chuàng)建Session的語(yǔ)句為:Session(\"Session名字\")=變量或字符串信息。讀取Sessi on信息的語(yǔ)句為:變量名=Session(\"Session名字\")。
Session數(shù)組的創(chuàng)建和讀取與簡(jiǎn)單變量基本上是一樣的,不同的是一般的Session變量只能存儲(chǔ)一個(gè)數(shù)據(jù),而Session數(shù)組能夠存儲(chǔ)多個(gè)數(shù)據(jù)。Session數(shù)組當(dāng)成一個(gè)整體看待,只能把一個(gè)數(shù)組整體存入或取出。
二、Session對(duì)象應(yīng)用實(shí)例
1.利用Session對(duì)象防止非法用戶訪問(wèn)并在網(wǎng)站內(nèi)各頁(yè)間傳遞、保持用戶信息
在互聯(lián)網(wǎng)的搜索引擎中,輸入查詢關(guān)鍵詞,便會(huì)找到包含該關(guān)鍵詞的若干網(wǎng)頁(yè),點(diǎn)擊即可進(jìn)入,這對(duì)網(wǎng)站的安全構(gòu)成了威脅。網(wǎng)站可以利用Session對(duì)象,控制用戶必須先登錄,登錄成功后才能訪問(wèn)其他網(wǎng)頁(yè)。控制的方法是在其他網(wǎng)頁(yè)的開(kāi)頭加上一段程序:
<%
If Session(\"User_Name\")= \"\"then '若Session(\"User_Name\")為空,則表示用戶沒(méi)有登錄過(guò)
Response.Redirect \"Login.asp\" '直接轉(zhuǎn)入登錄頁(yè)(Login.asp)
End
%>
如果用戶在登錄頁(yè)登錄了,則用<% Session(\"User_Name\")=\"用戶名\" %>語(yǔ)句創(chuàng)建名為“User_Name”的Session,將用戶名存入。登錄頁(yè)Login.asp主要代碼如下:
'用戶要填寫的登錄表單,略
<%
If Request.Form(\"User_Name\")<>\"\" Then '若用戶填寫了用戶名,則
Session(\"User_Name\")=Request.Form(\"User_Name\") '將用戶名存入名為User_Name的Session變量中
End If
%>
存儲(chǔ)用戶名的Session建立后,用戶再訪問(wèn)其他頁(yè)時(shí),其他頁(yè)都可以通過(guò)讀取Session(\"User_Name\")的值獲得該用戶信息。
2.利用Session數(shù)組在頁(yè)間傳遞、保持用戶購(gòu)物信息
可以利用Session對(duì)象具有的“一旦創(chuàng)建,各頁(yè)共享”的特點(diǎn),以及Session數(shù)組可以一次傳遞多個(gè)變量的特點(diǎn),為網(wǎng)站制作一個(gè)簡(jiǎn)易購(gòu)物車。將用戶在瀏覽商品頁(yè)選擇的商品名稱及數(shù)量,傳遞到“查看購(gòu)物籃”頁(yè)。以下給出制作簡(jiǎn)易購(gòu)物車實(shí)例。
(1)供用戶瀏覽、選擇商品的頁(yè)面程序SelectProduct1.asp部分代碼如下:
<%
dim ar1(2) '聲明一個(gè)數(shù)組ar1
dim ar2(2)
……
If Request(\"b1\").Count > 0 Then '若表單項(xiàng)b1不空,則用戶選擇了該產(chǎn)品
ar1(0)=Request(\"b1\") '將獲取的商品名稱存入ar1數(shù)組的第一個(gè)元素中
ar1(1)=Request(\"n1\") '將獲取的商品數(shù)量存入ar1數(shù)組的第二個(gè)元素中
Session(\"array_s1\") = ar1 '將數(shù)組ar1存入名為array_s1的Session數(shù)組中
Session(\"bz1\")=1 '將1存入名為bz1的Session中,做標(biāo)記用,表示數(shù)組不空
End If
……'其他商品依次類推
%>
請(qǐng)選擇商品,每件100元:
<Form Method=\"Post\" Action=\" SelectProduct1.asp\">
<P><Input Type=\"CheckBox\" Name=\"b1\" Value=\"籃球\">籃球
購(gòu)買數(shù)量<Input Type=\"input\" Name=\"n1\" Value=\"1\">'n1為接受數(shù)量的文本框,默認(rèn)值為1
<!——其他商品依次類推——>
<P><Input Type=\"Submit\" Value=\"提交\" Name=\"x1\">
<A Href=\"SelectProduct2.asp\">購(gòu)買其他商品</A>
<A Href=\"Display.asp\">查看購(gòu)物車</A></P>
</Form>
本頁(yè)中,若用戶選擇了一個(gè)商品,則通過(guò)Request對(duì)象分別獲取商品名稱和購(gòu)買數(shù)量,存入數(shù)組,再將該數(shù)組整體存入Session中,以便在“查看購(gòu)物車”頁(yè)中將所選商品名稱和購(gòu)買數(shù)量讀出來(lái)。
(2)其它商品頁(yè)程序同SelectProduct1.asp。
(3)“查看購(gòu)物車”頁(yè)程序Display.asp如下:
<%
If Session(\"bz1\")=1 Then
ar1=Session(\"array_s1\") '將Session數(shù)組array_s1整體取出,寫入名為ar1的數(shù)組變量中
Response.Write ar1(0)+\"nbsp\"+ar1(1)+\"<Br>\" '將數(shù)組中各元素輸出,即顯示商品名稱和購(gòu)買數(shù)量
End If
…… '其他商品依次類推
%>
三、Session對(duì)象與隱藏域的綜合應(yīng)用
隱藏域是表單中類型為Hidden的文本框,該文本框在頁(yè)面上不可見(jiàn)。表單提交時(shí),隱藏域的值一并被提交。利用的這個(gè)特點(diǎn),可以將登錄者的用戶名,即Session(\"User_Name\")的值,作為隱藏域的值,在用戶提交購(gòu)物表單時(shí)一并提交。隱藏域定義與賦值關(guān)鍵代碼如下:
<Input Type=\"Hidden\" Name=\"user_name\" Value=\"<%= Session(\"User_Name\")%>\"
四、使用Session對(duì)象時(shí)應(yīng)注意的問(wèn)題
Session對(duì)象雖然功能非常強(qiáng)大,但也有一定的局限性,使用時(shí)應(yīng)充分注意。
Session的使用要借助于客戶端。若某客戶端機(jī)器出現(xiàn)問(wèn)題,則網(wǎng)站對(duì)該用戶的記載中斷。同時(shí),服務(wù)器與客戶端的每次連接時(shí)要占用網(wǎng)絡(luò)資源,傳遞的數(shù)據(jù)量較多時(shí)將影響網(wǎng)速。
五、總結(jié)
Session對(duì)象在網(wǎng)站開(kāi)發(fā)中起著非常重要的作用。利用Session對(duì)象和Session數(shù)組,在網(wǎng)站各頁(yè)間可以一次傳遞單個(gè)或多個(gè)數(shù)據(jù)。Session對(duì)象占用大量的網(wǎng)站資源,應(yīng)注意使用后盡快刪除。合理地使用Session,將有助于提高網(wǎng)站開(kāi)發(fā)的效率。
參考文獻(xiàn):
[1]菜翠平 尚俊杰:網(wǎng)絡(luò)程序設(shè)計(jì)ASP(第2版)[M].北京:清華大學(xué)出版社,北方交通大學(xué)出版社,2004年2月P73
[2]石志國(guó) 王志良 薛為民:ASP精解案例教程[M].北京:清華大學(xué)出版社,北方交通大學(xué)出版社,2004年1月P118
[3]唐 晏:ASP.net頁(yè)面之間數(shù)據(jù)傳遞的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2006 Vol.23 No.5 P.228