基金項(xiàng)目:河北省交通廳“九五”行業(yè)聯(lián)合科技攻關(guān)項(xiàng)目,編號(hào)“HG-950403”,名稱“邯鄲交通信息網(wǎng)絡(luò)研究”
[摘要] 在Web應(yīng)用中,操作用戶的信息和操作過程中的數(shù)據(jù)經(jīng)常會(huì)存放在Session中,Session信息可提高程序的運(yùn)行效率和靈活性。當(dāng)用戶退出系統(tǒng)后,如果不對(duì)該用戶的Session信息及時(shí)清除,在一定的時(shí)間內(nèi)仍有可能會(huì)駐留在服務(wù)器上,不僅會(huì)造成Web服務(wù)器資源浪費(fèi),而且更為嚴(yán)重的會(huì)使用戶信息泄露。本文使用ASP.NET開發(fā)Web應(yīng)用程序,對(duì)程序的注銷技術(shù)進(jìn)行一些探討。
[關(guān)鍵詞] Session JavaScript onunload事件
一、引言
Session中文翻譯為會(huì)話,在web開發(fā)語境下的含義是指一類用來在客戶端與服務(wù)器之間保持狀態(tài)的解決方案或存儲(chǔ)結(jié)構(gòu)。一般情況下服務(wù)器會(huì)為seesion設(shè)置了一個(gè)失效時(shí)間,當(dāng)距離客戶端上一次使用session的時(shí)間超過這個(gè)失效時(shí)間時(shí),服務(wù)器就可以認(rèn)為客戶端已經(jīng)停止了活動(dòng),才會(huì)把session刪除以節(jié)省存儲(chǔ)空間,但瀏覽器不會(huì)主動(dòng)在關(guān)閉之前通知服務(wù)器它將要關(guān)閉,因此服務(wù)器根本不會(huì)有機(jī)會(huì)知道瀏覽器已經(jīng)關(guān)閉,除非程序通知服務(wù)器刪除一個(gè)session,否則服務(wù)器會(huì)在一定時(shí)間內(nèi)保留,這樣不僅會(huì)造成Web服務(wù)器資源浪費(fèi),也會(huì)造成用戶信息泄露,存在安全隱患。程序一般提供注銷功能刪除session,但用戶可能直接關(guān)閉瀏覽器或跳轉(zhuǎn)到其他站點(diǎn),如何在不確定的情況下,對(duì)session信息及時(shí)清空對(duì)于提高Web服務(wù)器運(yùn)行效率和程序的安全性都有很大的幫助。本文在Asp.net環(huán)境下對(duì)任意操作下的注銷技術(shù)進(jìn)行探討。
二、功能的實(shí)現(xiàn)
Login.aspx頁面驗(yàn)證用戶身份成功后,會(huì)進(jìn)入程序的主頁面main.htm。Main.htm是一個(gè)框架,包含三個(gè)框架。上面框架是提示信息頁main_top.aspx,包含登陸的用戶姓名,單位題頭,當(dāng)前服務(wù)器的日期和關(guān)閉程序的HTM的按鈕。main_top.aspx的HTML代碼中部分有一個(gè)JAVASCRIPT的代碼:
main_top.aspx的父窗口是main.htm,代碼window.parent.window.close ()引發(fā)main.htm的window.onunload事件,window.onunload事件又會(huì)引發(fā)window.onbeforeunload事件,因此在main.htm的頭文件中添加javascript代碼:window.onunload = function() { var http = new ActiveXObject(”MSXML2.XMLHTTP”); http.open(“get”, ”Logout.aspx“);http.send();}} window.onbeforeunload = function() { event.returnValue =“關(guān)閉窗口同時(shí)將注銷系統(tǒng)?!?}XmlHttp是一套可以在腳本語言中通過http協(xié)議傳送或從接收XML及其他數(shù)據(jù)的一套API。XmlHttp最大的用處是可以更新網(wǎng)頁的部分內(nèi)容而不需要刷新整個(gè)頁面。XmlHttp提供客戶端同http服務(wù)器通訊的協(xié)議??蛻舳丝梢酝ㄟ^XmlHttp對(duì)象(MSXML2.XMLHTTP.3.0)向http服務(wù)器發(fā)送請(qǐng)求并使用微軟XML文檔對(duì)象模型處理回應(yīng)。多數(shù)瀏覽器都增加了對(duì)XmlHttp的支持,IE中使用ActiveXObject方式創(chuàng)建XmlHttp對(duì)象,其他瀏覽器如:Firefox、Opera等通過window.XMLHttpRequest來創(chuàng)建xmlhttp對(duì)象。 main.htm在關(guān)閉之前執(zhí)行Logout.aspx頁面,該頁面專門負(fù)責(zé)注銷功能,頁面上只有一個(gè)LinkButton控件,在Page_Load事件中,添加如下代碼:LinkButton1_Click(sender,e);在LinkButton控件的Click事件中添加清除Session信息的代碼,如:Session.Remove (“userid”);Session.Remove (“username”);Session.Remove (“l(fā)sdata”);Session.Remove (“rolesetup”)。
經(jīng)過以上的處理,當(dāng)用戶關(guān)閉窗口或轉(zhuǎn)向其他地址時(shí),會(huì)彈出窗口“確定”會(huì)退出程序并清除Session信息。
三、總結(jié)
在大型的Web應(yīng)用中,數(shù)據(jù)的并發(fā)訪問量很大,Web服務(wù)器負(fù)荷較重,及時(shí)釋放不必要的資源,對(duì)應(yīng)用程序和Web服務(wù)器的穩(wěn)定性、可靠性和運(yùn)行效率都有正面的益處。Session作為客戶端與服務(wù)器的通信會(huì)話占用Web服務(wù)器消耗較多,因此釋放Session中的臨時(shí)交換數(shù)據(jù),可有效地提高服務(wù)器端的資源利用率,同時(shí)及時(shí)清除Session中的用戶信息,可避免黑客攻擊,保護(hù)用戶數(shù)據(jù)的安全,維護(hù)了用戶利益。
參考文獻(xiàn):
[1]微軟公司.ASP.NET安全應(yīng)用程序開發(fā)[M].北京:清華大學(xué)出版社,2003
[1]李建忠:Microsoft.NET框架程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003
[2]桂思強(qiáng):ASP.net與數(shù)據(jù)庫程序設(shè)計(jì)[M].北京:中國鐵道出版社,2002
[4]微軟 .ASP.NET安全應(yīng)用程序開發(fā)[M].北京:清華大學(xué)出版社.2003