HttpSessionState.IsCookieless 屬性

定義

會取得一個值,表示會話 ID 是嵌入在 URL 中,還是儲存在 HTTP cookie 中。

public:
 property bool IsCookieless { bool get(); };
public bool IsCookieless { get; }
member this.IsCookieless : bool
Public ReadOnly Property IsCookieless As Boolean

屬性值

true如果會話嵌入在 URL 中;否則,。 false

範例

以下程式碼範例將 Web.config 檔案中的 session 屬性設 cookieless 為 true。

<configuration>
  <system.web>
    <sessionState
      mode="InProc"
      cookieless="true"
      regenerateExpiredSessionId="true"
      timeout="30" />
  </system.web>
</configuration>

備註

ASP.NET 與每個瀏覽器唯一識別會話。 預設情況下,會話的唯一識別碼會儲存在瀏覽器中的非過期會話 Cookie 中。 你可以在 sessionState 設定元素中設定屬性為 ,true指定 session 識別碼不儲存在 cookie cookieless 中。

Note

為了提升應用程式的安全性,應用程式應該允許使用者登出,然後才會呼叫該 Abandon 方法。 這降低了不想要的來源利用 URL 中的唯一識別碼,為使用者擷取儲存在會話中的私人資料的可能性。

ASP.NET 透過自動在頁面 URL 中插入唯一的會話 ID 來維持無 cookie 會話狀態。 例如,以下網址已由 ASP.NET 修改,包含獨特的會話 ID lit3py55t21z5v55vlm25s55:

http://www.example.com/(S(4danlfat035muve4g0mvgfrr))/orderform.aspx

ASP.NET 會在將每個頁面傳送到瀏覽器前,在連結中嵌入一個 session-ID 值,來修改所有請求頁面中的連結。 只要使用者遵循網站提供的連結路徑,會話狀態就會被維持。 然而,如果使用者代理重寫 URL,會話狀態實例將會遺失。

會話 ID 嵌入在 URL 中,位於應用程式名稱後方的斜杠後,以及剩餘的檔案或虛擬目錄識別碼之前。 這讓 ASP.NET 能在請求中使用 SessionStateModule 前,先解析應用程式名稱。

預設情況下,無 cookie 會話中使用的會話識別碼會被回收使用。 也就是說,如果請求的 session ID 已過期,則會使用請求中提供的 session ID 啟動新會話。 當包含無 cookie 會話 ID 的連結被多個瀏覽器(可能是透過搜尋引擎或其他程式)分享時,這種行為可能導致不想要的會話資料共享。 你可以透過停用會話識別碼的回收功能,降低多個客戶端共享會話資料的可能性。 為此,請將 sessionState 配置元素的屬性設regenerateExpiredSessionIdtrue。 當無 Cookie 會話請求且會話 ID 過期時,會產生新的會話 ID。 請注意,若使用過期會話 ID 的請求使用 HTTP POST 方法,則當 regenerateExpiredSessionId 變成 true 時,任何已發布的資料都會遺失,因為 ASP.NET 會執行重定向以確保瀏覽器在 URL 中擁有新的會話識別碼。

Note

雖然將屬性設 regenerateExpiredSessionIdtrue 可以降低不想要的會話資料分享的可能性,但無法防止不想要的來源取得該值並納入伺服器請求時,取得其他使用者 SessionID 的會話存取權。 如果你在會話狀態下儲存私人或敏感資訊,建議使用 SSL 來加密瀏覽器與伺服器 SessionID之間包含 的通訊。

適用於

另請參閱