Cookies和Session(二)
一、理解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 狀態服務來存儲狀態信息
總結
以上是生活随笔為你收集整理的Cookies和Session(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]使用URLConnection下载
- 下一篇: 利用FSMT进行文件服务器迁移及整合