[摘 要]Web應用中操作用戶的信息和操作過程中的數據經常會存放在Session中,Session信息可提高程序的運行效率和靈活性。但是Session信息在用戶不使用時會在一定的時間內駐留在服務器上,不僅會造成Web服務器資源浪費,而且更為嚴重的會使用戶信息泄露。因此當用戶退出應用系統時,及時清理不用的Session信息意義就很大了。本文使用ASP.NET對程序的注銷技術進行一些探討。
[關鍵詞]Session; JavaScript; onunload事件;
一、Session分析及原理
一般情況下服務器會為seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,服務器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間,但瀏覽器不會主動在關閉之前通知服務器它將要關閉,因此服務器根本不會有機會知道瀏覽器已經關閉,這樣不僅會造成Web服務器資源浪費,也會造成用戶信息泄露,存在安全隱患。如何在不確定的情況下,對session信息及時清空對于提高Web服務器運行效率和程序的安全性都有很大的幫助。本文在Asp.net環境下對任意操作下的注銷技術進行探討。
二、注銷功能的實現
Default.aspx頁面驗證用戶身份成功后,會進入程序的主頁面main.htm。Main.htm是一個框架,包含三個框架。上面框架是提示信息頁main_top.aspx,包含登陸的用戶姓名,單位題頭,當前服務器的日期和關閉程序的HTM的按鈕。main_top.aspx的HTML代碼中部分添加一個JAVASCRIPT的代碼:
function __toTop()
{ window.parent.window.close ();}
main_top.aspx的父窗口是main.htm,代碼window.parent.window.close ()引發main.htm的window.onunload事件,window.onunload事件又會引發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 = \"關閉窗口同時將注銷系統。\"; }
XmlHttp是一套可以在腳本語言中通過http協議傳送或從接收XML及其他數據的一套API。XmlHttp最大的用處是可以更新網頁的部分內容而不需要刷新整個頁面。XmlHttp提供客戶端同http服務器通訊的協議。客戶端可以通過XmlHttp對象(MSXML2.XMLHTTP.3.0)向http服務器發送請求并使用微軟XML文檔對象模型處理回應[3]。多數瀏覽器都增加了對XmlHttp的支持,IE中使用ActiveXObject方式創建XmlHttp對象,其他瀏覽器如:Firefox、Opera等通過window.XMLHttpRequest來創建xmlhttp對象。 main.htm在關閉之前執行Logout.aspx頁面,該頁面專門負責注銷功能,頁面上只有一個LinkButton控件,在Page_Load事件中,添加如下代碼:
LinkButton1_Click(sender,e);
在LinkButton控件的Click事件中添加清除Session信息的代碼,如:
Session.Remove (\"userid\");
Session.Remove (\"username\");
Session.Remove (\"rolesetup\");
經過以上的處理,當用戶關閉窗口或轉向其它地址時,會彈出窗口
“確定”會退出程序并清除Session信息。
三、總結
在大型的Web應用中,數據的并發訪問量很大,Web服務器負荷較重,及時釋放不必要的資源,對應用程序和Web服務器的穩定性、可靠性和運行效率都有重要的意義。Session作為客戶端與服務器的通信會話占用Web服務器消耗較多,因此釋放Session中的臨時交換數據,可有效地提高服務器端的資源利用率,同時及時清除Session中的用戶信息,可避免黑客攻擊,保護用戶數據的安全,維護了用戶自身利益。
參考文獻:
[1] 王國榮.Active Server Page WEB數據庫[M].人民郵電出版社,2000。
[2] MSDN Library Visual C#文檔. http://www.microsoft.com/china/MSDN/library/Mobility/default.mspx,2004。
[3]劉前進,王蒙,張宏林. Delphi數據庫編程技術[M].人民郵電出版社,1999。
[4]王忠華,魏志強.高級編程篇程序設計Delphi5.0[M].中國鐵道出版社,2000。
[5]桂思強.ASP.net與數據庫程序設計[M].中國鐵道出版社,2002。