ASP.NET中的Session狀態(tài)
和cookie不一樣的是,Session狀態(tài)沒有大小限制。如果有極端的要求,可以使用Session保存上G的數(shù)據(jù)。并且Session可以保存更復雜的對象,例如可以在Session中保存一個DataSet。
當使用一個Session狀態(tài)時,一個名為ASP.NET_SessionId的cookie會自動添加到瀏覽器。這個cookie包含一個唯一的標識符,它可以在頁面切換時跟蹤用戶。
默認情況下,如果cookie被禁用了,Session狀態(tài)也不能正常工作了。默認情況下,假設用戶超過20分鐘不請求任何頁面,保存在Session狀態(tài)中的數(shù)據(jù)會被丟棄。
ASP.NET使用Session對象
用戶操作Session狀態(tài)最主要的應用程序編程接口是HttpSessionState類。該對象被 Page.Session,Context.Session,UserControl.Session,WebService.Session和 Application.Session屬性暴露。也就是說基本可以在任何地方訪問到Session狀態(tài)。
HttpSessionState支持下面這些屬性:
CookieMode——用來指定是否啟用不依賴cookie的Session狀態(tài)功能。
Count——用來獲得Session狀態(tài)中包含項的數(shù)量。
IsCookieless——用來指定是否啟用不依賴cookie的Session狀態(tài)功能。
IsNewSession——用來檢測當前請求是否創(chuàng)建了新的用戶會話;
IsReadOnly——是否只讀;
Keys——用來獲取保存在Session狀態(tài)中項目的名稱列表;
Mode——用來指定當前Session狀態(tài)的存儲處理程序。
SessionID——用來獲得唯一的會話標識符;
Timeout——用來指定Web服務器假設用戶離開并取消Session狀態(tài)過期分鐘數(shù)。***為525600分鐘(1年);
HttpSessionState對象還包含以下方法:
Abandon——用來終止一個用戶會話;
Clear——用來清除Session狀態(tài)中所有項目;
Remove——用來從Session狀態(tài)中刪除特定的項目;
ASP.NET提交會話事件
Global.asax中包含兩個可以處理的關聯(lián)Session狀態(tài)的事件:Session Start和Session End事件。Session Start事件是在一個新會話開始時觸發(fā)的,Session End事件在會話終止時被觸發(fā)。
會話失效控制
默認情況下,20分鐘內(nèi)用戶不請求頁面,Session過期??梢栽谂渲梦募薷腟ession的過期時間:
- <?xml version="1.0"?>
- <configuration>
- <system.web>
- <sessionState timeout="60" />
- </system.web>
- </configuration>
也可以用編程的方式來改變Session狀態(tài)的過期時間
Session.Timeout = 60;
使用Cookieless的會話狀態(tài)
默認情況下,Session狀態(tài)依賴cookie。如果用戶瀏覽器禁止了cookie,默認情況下Session狀態(tài)就不能工作。這種情況下可以使用無cookie的會話,當啟用無cookie的會話時,用戶的會話ID就會添加到頁面的URL中。
可以修改配置文件的sessionState元素,配置cookieless的值為AutoDetect。
- <?xml version="1.0"?>
- <configuration>
- <system.web>
- <sessionState cookieless="AutoDetect"
- regenerateExpiredSessionId="true" />
- </system.web>
- </configuration>
【編輯推薦】