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