一、理解Session機制:
Session是一種用於伺服器端狀態管理的機制,伺服器使用一種索引值對的結構來儲存資訊。當程式需要為某個用戶端的請求建立一個Session的時候,伺服器首先檢查這個用戶端的請求裡是否已包含了一個Session標識 - 稱為 Session id,如果已包含一個Session id則說明以前已經為此用戶端建立過Session,伺服器就按照Session id把這個 Session檢索出來使用。在ASP.NET中,預設情況下這個Session id會儲存在用戶端瀏覽器的cookie 中,預設情況下如果不對Session做任何寫操作的話,用戶端是不儲存這個Session id的,可以通過在頁面拖一個button,不要對Session做任何寫操作,然後在Click事件中列印Session.SessionID,當單擊button時每次SessionID都是不同的。
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(Session.SessionID);
}
這說明伺服器端的Session id都是重新建立的。
Session id的儲存方式有以下四種
1、AutoDetect
Web.config做相應的配置如下:
<system.web>
<sessionState cookieless="AutoDetect">
</sessionState>
</system.web>
ASP.NET 確定請求瀏覽器或請求裝置是否支援 Cookie。如果請求瀏覽器或請求裝置支援 Cookie,則 AutoDetect 使用 Cookie 來保留使用者資料;否則,將在查詢字串中使用一個標識符。如果瀏覽器或裝置支援 Cookie,但當前禁用了 Cookie,則請求功能仍會使用 Cookie(也就是禁止不了Session所用的Cookie,這一點我有點疑惑,我禁止掉ie的Cookie,但仍然可以使用Session)。
2、UseCookies
Web.config做相應的配置如下:
<system.web>
<sessionState cookieless="UseCookies">
</sessionState>
</system.web>
無論瀏覽器或裝置是否支援 Cookie,都使用 Cookie 來保留使用者資料。
3、UseDeviceProfile
Web.config做相應的配置如下:
<system.web>
<sessionState cookieless="UseDeviceProfile">
</sessionState>
</system.web>
ASP.NET 根據 HttpBrowserCapabilities 設定來確定是否使用 Cookie。如果 HttpBrowserCapabilities 設定指示瀏覽器或裝置支援 Cookie,將使用 Cookie;否則,將在查詢字串中使用一個標識符。
4、UseUri
Web.config做相應的配置如下:
<system.web>
<sessionState cookieless="UseUri">
</sessionState>
</system.web>
無論瀏覽器或裝置是否支援 Cookie,調用功能都使用查詢字串來儲存標識符。這時候ASP.NET會將Session id存放在地址欄中,當訪問某個寫了Session的頁面時,地址欄會變成:
http://localhost:1237/WebSite6/(S(vyn3bk55h4a03w455vjiwj21))/default4.aspx
這時候你可以去列印Session id,你會發現Session id=vyn3bk55h4a03w455vjiwj21。
二、ASP.NET中Session的儲存模式有以下五種:
1、Custom
工作階段狀態將使用自訂資料存放區區來儲存工作階段狀態資訊。
2、InProc
會話處於正在處理 ASP.NET 輔助進程的狀態。
3、Off
工作階段狀態被禁用。
4、SQLServer
工作階段狀態將使用進程外 SQL Server 資料庫來儲存狀態資訊。
5、StateServer
工作階段狀態將使用進程外 ASP.NET 狀態服務來儲存狀態資訊。
參考:
http://www.cnblogs.com/netflu/archive/2008/12/24/1361560.html
http://www.codeproject.com/KB/aspnet/ExploringSession.aspx