陳莉莉
[摘要]基于ASP.net平臺介紹session的相關知識。首先介紹Session的基本概念、作用及工作過程,然后總結幾種常見的造成Session值丟失的原因,并給出相應的解決思路。
[關鍵詞]Session丟失解決方法
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)1120066-01
Session對象的主要用途是保存信息。當一個用戶第一次登錄網站時,系統會為其分配一個Session,只有當該客戶退出時,或者Session生命周期結束時,信息才會被清除。利用Session還可以創建虛擬購物車,當客戶在網絡商店中選擇一種商品時,該商品就會進入到購物車里面,客戶的購物信息就會保存在Session中。
一、Session是什么
Session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間。具體到web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。因此,從上述的定義中我們就可以看到,Session實際上是一個特定的時間概念。一個Session
的概念需要包括特定的客戶端、特定的服務器端,以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session,同B用戶和C服務器中建立連接時所處的Session是兩個不同的Session。
二、Session的作用
Session在WEB技術中占有非常重要的作用。由于網頁是一種無狀態的連接程序,因此你無法得知用戶的瀏覽狀態。因此我們必須通過Session記錄用戶的有關信息,以供用戶再次以此身份對web服務器提供要求時作確認。Session的典型應用是存放用戶的Login信息,如用戶名,密碼,權限角色等信息,應用程序(如Email服務、網上銀行等系統)根據這些信息進行身份驗證和權限驗證。
三、Session的工作過程
當用戶第一次訪問這個網站時,服務器自動會給這個用戶分配一個SessionID號,瀏覽器只要支持Session,就會根據Session的協議,每次訪問網站時都發送這個SessionID給服務器,服務器就知道原來這次http請求還是上次那個用戶發的,因為http協議是沒有狀態的協議,而有了SessionID補充,就識別了用戶。當用戶在WEB應用程序中間跳轉時,存儲在Session對象中的變量不會清除,而會始終存在。Session變量相當于運行在客戶端多個頁面間的全局變量,當用戶請求來自應用程序的WEB頁時,如果該用戶還沒有會話,則WEB服務器將自動創建一個Session對象。當會話過期或被放棄后,服務器將終止該會話,如果WEB服務器停止工作,Session也將被釋放。
四、Session值丟失的可能原因及解決方法
1.有些殺病毒軟件會去掃描Web.Config文件,那時Session肯定會丟失。解決方法是:使殺病毒軟件屏蔽掃描Web.Config文件。
2.程序內部里有讓Session丟失的代碼。解決方法是:檢查是否有Session.Abandon()之類的代碼。
3.程序有框架頁面和跨域情況。解決方法是:在Window服務中將ASP.
NET State Service 啟動。
4.在默認情況下,Session是保存在進程內的,IIS5是aspnet_wp.exe,
而IIS6是W3wp.exe,該進程不穩定,在某些事件發生時,進程會重起,所以造成了存儲在該進程內的Session丟失。引起進程重起可能有以下幾種情況:(1)配置文件中processModel標簽的memoryLimit屬性。(2)Global.asax或者Web.config文件被更改。(3)Bin文件夾中的Web程序(DLL)被修改。(4)殺毒軟件掃描了一些.config文件。
5.文件夾選項中,如果沒有打開“在單獨的進程中打開文件夾窗口”,一旦新建一個窗口,系統可能認為是新的Session會話,而無法訪問原來的Session,所以需要打開該選項,否則會導致Session丟失。
6.大部分的Session丟失是客戶端引起的,所以要從客戶端入手,看看cookie有沒有打開,或者IE中的cookie數量限制也可能導致Session的丟失。
五、解決Session丟失的其他方法
1.做Session讀寫日志,每次讀寫Session都要記錄下來,并且要記錄SessionID、Session值、所在頁面、當前函數、函數中的第幾次Session操作,通過這樣的途徑查找丟失的原因會方便很多。
2.如果允許的話,建議使用state server或sql server保存Session,
這樣不容易丟失。
3.在global.asax中加入代碼,記錄Session的創建時間和結束時間,超時造成的Session丟失是可以在SessionEnd中記錄下來的。
5.在用ASP.net開發程序的時候遇到Session丟失時,可以完成以下三步,便可保存狀態。step1:在WEB.CONFIG文件中修改Session狀態保存模式,如:
六、結束語
Session的作用不言而喻,在實際操作和網站開發建設中,造成Session值丟失的原因很多,這就需要我們不斷發現去總結錯誤產生的原因,找到解決的方法。
參考文獻:
[1]邵良杉等,ASP.NET(C#)[M].北京:清華大學出版社,2007:192-193.