Asp.net

Session.Abandon() 和 Session.Clear() 有什麼區別

  • September 24, 2009

銷毀會話和刪除它的值有什麼區別?你能提供一個例子來證明這一點嗎?

我搜尋了這個問題,但沒有掌握全部答案。一些答案是:

  • Session.Abandon()銷毀會話
  • Session.Clear()只是刪除所有值

一位朋友告訴我:

清除會話不會取消設置會話,它仍然存在,具有相同的使用者 ID,但只是清除了值。

Abandon 將完全破壞會話,這意味著您需要開始一個新會話,然後才能在會話中為該使用者儲存更多值。

下面的程式碼有效並且不會引發任何異常。

Session.Abandon();
Session["tempKey1"] = "tempValue1";

當您 Abandon() 會話時,您(或者更確切地說是使用者)將獲得一個新的 SessionId

當我測試會話時,當我放棄會話時它沒有任何變化。

我只發現一個區別: session.Abandon()引發Session_End事件

Clear - 從會話狀態集合中刪除所有鍵和值。

Abandon - 刪除儲存在 Session 中的所有對象。如果您不顯式呼叫 Abandon 方法,則伺服器會在會話超時時刪除這些對象並銷毀會話。

它還會引發諸如Session_End 之類的事件。

Session.Clear 可以類比為從書架上刪除所有書籍,而 Session.Abandon 更像是扔掉整個書架

你說:

當我測試會話時,當我放棄會話時它沒有任何變化。

當您僅在一個請求中執行此操作時,這是正確的。

在下一個請求中,會話將有所不同。但是會話 ID 可以重複使用,以便 id 保持不變。

如果您將使用 Session.Clear,您將在許多請求中擁有相同的會話。

通常,在大多數情況下您需要使用 Session.Clear。

如果您確定使用者將要離開您的站點,您可以使用 Session.Abandon。

所以回到差異:

  1. Abandon 提出 Session_End 請求。
  2. Clear 會立即刪除項目,Abandon 不會。
  3. Abandon 釋放 SessionState 對象及其項目,以便它可以收集垃圾以釋放資源。Clear 保持 SessionState 和與之關聯的資源。

引用自:https://stackoverflow.com/questions/1470445