共用方式為


工作階段識別項

更新:2007 年 11 月

使用儲存在 SessionID 屬性 (Property) 中的唯一識別項,可辨識瀏覽器工作階段 (Session)。工作階段 ID (Session ID) 可讓 ASP.NET 應用程式,將特定的瀏覽器與相關的工作階段資料和 Web 伺服器上的資訊產生關聯。在瀏覽器和 Web 伺服器之間會在 Cookie 中傳輸工作階段 ID 值,或是在 URL 中傳輸 (如果指定 Cookieless 工作階段)。

警告:

不管是做為 Cookie 或 URL 的一部分,都會以純文字方式傳送 P:System.Web.SessionState.HttpSessionState.SessionID 值。透過取得 SessionID 值並將這個值包含在對伺服器的要求中,不適當的對象可以取得其他使用者的工作階段存取權限。如果您在工作階段狀態中儲存私用資訊或機密資訊,則建議使用 SSL 加密瀏覽器和伺服器之間包含 SessionID 的通訊。

Cookieless SessionID

預設會將 SessionID 儲存在瀏覽器中未到期的工作階段 Cookie 中。將 Web.config 檔案之 sessionState 區段的 cookieless 屬性 (Attribute) 設為 true,即可指定不在 Cookie 中儲存工作階段識別項。

注意事項:

若要提升應用程式的安全性,您應該允許使用者登出應用程式,同時應用程式應該呼叫 Abandon 方法。這樣可降低不適當的對象取得 URL 中的唯一識別項,並使用這個唯一識別項擷取儲存在工作階段中的私用使用者資料的可能性。

ASP.NET 透過自動將唯一工作階段 ID 插入至頁面的 URL 中,即可維護 Cookieless 工作階段狀態。例如,ASP.NET 已修改下列 URL,以包含唯一工作階段 ID lit3py55t21z5v55vlm25s55:

http://www.example.com/s(lit3py55t21z5v55vlm25s55)/orderform.aspx

ASP.NET 會修改所有要求頁面中包含的連結,而且這些連結會使用相對於應用程式的路徑 (不會修改明確路徑),方法是在傳送每個頁面至瀏覽器之前,在連結中嵌入工作階段 ID 值。只要使用者跟隨著 ASP.NET 應用程式提供的連結路徑,就會保持維護工作階段狀態。但是,如果用戶端重寫應用程式提供的 URL,則 ASP.NET 可能無法解析工作階段 ID 並將要求與現有的工作階段產生關聯,導致對要求啟動新的工作階段。

工作階段 ID 會內嵌在 URL 中:在應用程式名稱的斜線之後,並在其餘檔案或虛擬目錄識別項之前。這樣可讓 ASP.NET 在涉及要求中的 SessionStateModule 之前,先解析應用程式名稱。

下列範例顯示設定 ASP.NET 應用程式以使用 Cookieless 工作階段識別項的 Web.config 檔案。

<configuration>
  <system.web>
    <sessionState cookieless="true"
      regenerateExpiredSessionId="true" />
  </system.web>
</configuration>

重新產生到期的工作階段識別項

預設會回收用於 Cookieless 工作階段中的工作階段 ID 值。也就是說,如果是以已到期的工作階段 ID 產生要求,將使用要求提供的 SessionID 啟動新的工作階段。這個行為可能會使透過搜尋引擎或其他程式,讓含有 Cookieless SessionID 的連結與多個瀏覽器共用時,產生不必要的共用工作階段資料。您可以停用工作階段識別項的回收,即可降低多個用戶端共用工作階段資料的可能性。若要這麼做,則需將 sessionState 組態項目的 regenerateExpiredSessionId 屬性設為 true。這樣會在以到期的工作階段 ID 產生 Cookieless 工作階段要求時,導致產生新的工作階段 ID。

注意事項:

如果以到期的工作階段 ID 進行的要求是使用 HTTP POST 方法所產生,則在 regenerateExpiredSessionId 是 true 時會遺失任何發佈的資料,因為 ASP.NET 會執行重新導向,以確定瀏覽器在 URL 中擁有新的工作階段識別項。

自訂工作階段識別項

透過建立繼承 SessionIDManager 類別的類別,並以您自己的自訂實作 (Implementation) 覆寫 CreateSessionIDValidate 方法,即可實作自訂類別以提供並驗證 SessionID 值。如需覆寫 SessionIDManager 類別及實作這些方法的範例,請參閱 CreateSessionID 方法所提供的範例。

您可以建立實作 ISessionIDManager 介面的類別,即可取代整個 SessionIDManager。例如,您可能具有使用 ISAPI 篩選常式 (Filter) 將唯一識別項和非 ASP.NET 網頁 (例如 HTML 頁面或影像) 產生關聯的 Web 應用程式。您可以實作自訂的 SessionIDManager 類別,以將這個唯一識別項搭配 ASP.NET 工作階段狀態使用。如果自訂的類別支援 Cookieless 工作階段識別項,將需要實作方案以傳送及擷取 URL 中的工作階段識別項。

請參閱

概念

ASP.NET 工作階段狀態概觀

ASP.NET 狀態管理概觀