Session State 工作階段狀態
背景
當使用者巡覽 Web 應用程式中的 ASP.NET 頁面時,ASP.NET 工作階段狀態可讓您為使用者儲存和擷取值。HTTP 是沒有狀態 (Stateless) 的通訊協定。這表示 Web 伺服器會將頁面的每個 HTTP 要求視為獨立要求。伺服器不會保留先前要求所使用的變數值。ASP.NET 工作階段狀態會在限制時間間隔內,將來自相同瀏覽器的要求識別為一個工作階段,並提供方法來保存這個工作階段期間內的變數值。依照預設,所有 ASP.NET 應用程式都會啟用 ASP.NET 工作階段狀態。
工作階段狀態的替代方案包括下列各項:
- 應用程式狀態,可儲存所有 ASP.NET 應用程式使用者可以存取的變數。
- 設定檔屬性,可將使用者值保存在資料存放區中而不使它們逾期。
- ASP.NET 快取,可將值儲存在適用於所有 ASP.NET 應用程式的記憶體中。
- 檢視狀態,可保存頁面中的數值。
- Cookie。
- HTML 表單上的查詢字串和欄位,可由 HTTP 要求提供。
Session在Web.config的常用設定
在<system.web>標籤內
<sessionState
mode="[Off|InProc|StateServer|SQLServer|Custom]"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="10"
cookieless="[true|false|AutoDetect|UseCookies|UseUri|UseDeviceProfile]"
timeout="20"
/>
可選擇的屬性
mode
值 |
描述 |
InProc |
工作階段狀態處於 ASP.NET 背景工作處理序的同處理序中。預設為 InProc 值。 |
Off |
工作階段狀態已停用。 |
Custom |
工作階段狀態使用自訂資料存放區儲存工作階段狀態資訊。 |
SQLServer |
工作階段狀態使用跨處理序 SQL Server 資料庫儲存狀態資訊。 |
StateServer |
工作階段狀態使用跨處理序 ASP.NET 狀態服務儲存狀態資訊。 |
stateConnectionString
若mode為StateServer必須設定此屬性,例如:"tcpip=127.0.0.1:42424"。 預設值為 "tcpip=127.0.0.1:42424"。
stateNetworkTimeout
指定在取消要求之前,Web 伺服器與狀態伺服器之間的 TCP/IP 網路連接可以閒置的秒數。mode 屬性設為 StateServer 值時會使用這個屬性。預設值為 10 秒。
cookieless
值 |
描述 |
True |
使用Cookieless模式,不使用Client端瀏覽器Cookie改為透過URL傳送SessionID.ex.http://localhost/MyTestApplication/(tgdde33errret225f1gdfd) /default.aspx 括號部分為IIS自動加上(SessionID),不影響之前的連結。 |
False |
使用Cookie模式,預設值,Client端瀏覽器Cookie須開啟(Session在Client端是以Cookie的型態存在)。 |
AutoDetect |
ASP.NET 決定要求瀏覽器或裝置是否支援 Cookie。
如果要求的瀏覽器或裝置支援 Cookie,AutoDetect 便會使用 Cookie 保存使用者資料,否則便會在查詢字串中使用識別項。
如果瀏覽器或裝置支援 Cookie,但目前已停用 Cookie,要求的功能還是會使用 Cookie。 |
UseCookies |
不論瀏覽器或裝置是否支援 Cookie,Cookie 都會保存使用者資料。 |
UseDeviceProfile |
ASP.NET 根據 HttpBrowserCapabilities 設定決定是否使用 Cookie。
如果 HttpBrowserCapabilities 設定表示瀏覽器或裝置支援 Cookie,就會使用 Cookie,否則便會在查詢字串中使用識別項。 |
UseUri |
不論瀏覽器或裝置是否支援 Cookie,呼叫的功能都會使用查詢字串儲存識別項。 |
timeout
有效時間(分鐘數),預設值為20分鐘
儲存工作階段狀態的值
C#範例
string firstName = "Jeff";
string lastName = "Smith";
string city = "Seattle";
Session["FirstName"] = firstName;
Session["LastName"] = lastName;
Session["City"] = city;
能夠使用已啟用工作階段狀態之 ASP.NET 應用程式中的 Current 屬性,存取目前要求內容的 Web Form 網頁或類別。
讀取工作階段狀態的值
C#範例
string firstName = (string)(Session["First"]);
string lastName = (string)(Session["Last"]);
string city = (string)(Session["City"]);
能夠使用已啟用工作階段狀態之 ASP.NET 應用程式中的 Current 屬性,存取目前要求內容的 Web Form 網頁或類別。