Asp.net
Session.Abandon() 和 Session.Clear() 有什麼區別
銷毀會話和刪除它的值有什麼區別?你能提供一個例子來證明這一點嗎?
我搜尋了這個問題,但沒有掌握全部答案。一些答案是:
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。
所以回到差異:
- Abandon 提出 Session_End 請求。
- Clear 會立即刪除項目,Abandon 不會。
- Abandon 釋放 SessionState 對象及其項目,以便它可以收集垃圾以釋放資源。Clear 保持 SessionState 和與之關聯的資源。