|
當用戶在 Web 應用程序中導航 ASP.NET 頁時,ASP.NET 會話狀態使您能夠存儲和檢索用戶的值。HTTP 是一種無狀態協議。這意味著 Web 服務器會將針對頁面的每個 HTTP 請求作為獨立的請求進行處理。服務器不會保留以前的請求過程中所使用的變量值的任何信息。
ASP.NET 會話狀態將來自限定時間范圍內的同一瀏覽器的請求標識為一個會話,當每個用戶首次與這臺WWW服務器建立連接時,他就與這個服務器建立了一個Session,同時服務器會自動為其分配一個SessionID,用以標識這個用戶的唯一身份。Session提供用于在該會話持續期間內保留變量值的方法。默認情況下,將為所有 ASP.NET 應用程序啟用ASP.NET 會話狀態.
會話變量可以是任何有效的 .NET Framework 類型, 注意:當使用 InProc 以外的會話狀態模式時,會話變量類型必須為基元 .NET 類型或可序列化的類型。這是因為會話變量值存儲在外部數據存儲區中。
會話由一個唯一標識符標識,可使用 SessionID 屬性讀取此標識符。為 ASP.NET 應用程序啟用會話狀態時,將檢查應用程序中每個頁面請求是否有瀏覽器發送的 SessionID 值。如果未提供任何 SessionID 值,則 ASP.NET 將啟動一個新會話,并將該會話的 SessionID 值隨響應一起發送到瀏覽器。
默認情況下,SessionID 值存儲在 Cookie 中。但也可以將應用程序配置為在“無 Cookie”會話的 URL 中存儲 SessionID 值。只要一直使用相同的 SessionID 值來發送請求,會話就被視為活動的。如果特定會話的請求間隔超過指定的超時值(以分鐘為單位),則該會話被視為已過期。使用過期的 SessionID 值發送的請求將生成一個新的會話。
安全說明:
無論是作為 Cookie 還是作為 URL 的一部分,System.Web.SessionState.HttpSessionState.SessionID 值都以明文的形式發送。惡意用戶通過獲取 SessionID 值并將其包含在對服務器的請求中,可以訪問另一位用戶的會話。如果您將敏感信息存儲在會話狀態中,建議使用 SSL 來加密瀏覽器和服務器之間包含 SessionID 值的任何通信。
默認情況下,SessionID 值存儲在瀏覽器的不過期會話 Cookie 中。但是,通過在 Web.config 文件的 sessionState 節中將 cookieless 屬性設置為 true,可以指定不應將會話標識符存儲在 Cookie 中。
<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
NET技術:ASP.NET Session詳解,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。