• ASP.Net
  • 常用語法介紹
  • Session
  • import_contacts ASP.NET Session State工作階段狀態概觀
    7829
適用範圍

使用 ASP.NET 工作階段狀態為使用者儲存和擷取值。

實用性:
重要性:

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 網頁或類別。