簡體   English   中英

C# 清除 Session

[英]C# Clear Session

問題 #1

我想知道我應該什么時候使用:

Session.Abandon() // 當我在跟蹤期間和調用它之后使用它時 - 我發現 session 仍然有一個值。

我應該什么時候使用:

Session.Clear()

我應該何時使用每種特定方法?


  • 一般來說?
  • 在我的具體情況下?

我在頁面加載中檢查 session 是否不等於 null。 如果 session 等於 null,我想清除 session 並重定向到登錄頁面?

我應該使用這樣的東西:

private void initSession()
{
    Session.Clear();
    Session.Abandon();
    Response.Redirect("LoginPage.aspx");
}

在 ASP.NET 中,我什么時候應該使用 Session.Clear() 而不是 Session.Abandon()?

Session.Abandon() 銷毀 session 並觸發 Session_OnEnd 事件。

Session.Clear() 只是從 Object 中刪除所有值(內容)。 具有相同密鑰的 session 仍然存在。

因此,如果您使用 Session.Abandon(),您將丟失特定的 session,用戶將獲得一個新的 session 密鑰。 例如,您可以在用戶注銷時使用它。

使用 Session.Clear(),如果您希望用戶留在同一個 session(例如,如果您不希望他重新登錄)並重置他的所有 Z21D6F40CFB511982E4424E0E20 數據。

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

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

放棄 - 刪除 Session 中存儲的所有對象。 如果不顯式調用 Abandon 方法,則服務器會在 session 超時時刪除這些對象並銷毀 session。 它還會引發像 Session_End 這樣的事件。

Session.Clear 可以比作把書架上的所有書都搬走,而 Session.Abandon 更像是把整個書架都扔掉了。

...

一般情況下,大多數情況下需要使用 Session.Clear。 如果您確定用戶將要離開您的站點,您可以使用 Session.Abandon。

所以回到差異:

  • Abandon 提出 Session_End 請求。
  • Clear 會立即刪除項目,Abandon 不會。
  • Abandon 發布 SessionState object 及其項目,以便它可以垃圾收集。
  • Clear 保持 SessionState 和與之關聯的資源。

Session.Clear() 還是 Session.Abandon()?

You use Session.Clear() when you don't want to end the session but rather just clear all the keys in the session and reinitialize the session.

Session.Clear() 不會導致 Global.asax 文件中的 Session_End 事件處理程序執行。

但另一方面 Session.Abandon() 將完全刪除 session 並將執行 Session_End 事件處理程序。

Session.Clear() 就像從書架上拿書一樣

Session.Abandon() 就像扔書架本身一樣。

問題

如果在頁面加載中不等於 null,我會檢查一些會話。 如果其中一個等於 null 我想清除所有會話並重定向到登錄頁面?

回答

如果您希望用戶再次登錄,請使用 Session.Abandon。

另一個很大的區別是 Abandon 不會立即刪除項目,但是當它進行清理時,它會在 session 項目上循環以檢查它需要特別處理的 STA COM 對象。 這可能是一個問題。

在高負載下,兩個(或更多)請求可能會針對相同的 session(即具有相同 session cookie 的兩個請求)發送到服務器。 它們的執行將被序列化,但由於 Abandon 不會同步清除項目,而是設置一個標志,因此兩個請求都可以運行,並且兩個請求都可以安排工作項以“稍后”清除 session。 然后這兩個工作項可以同時運行,並且都在檢查 session 對象,並且都在清除對象數組,當你有兩個東西迭代一個列表並改變它時會發生什么? 繁榮,因為這發生在 queueuserworkitem 回調中,而不是在 try/catch 中完成(感謝 MS)。 它將關閉您的整個應用程序域。 到過那里。

在網上找到這篇文章,與這個主題非常相關。 所以在這里發帖。

ASP.NET 內部 - 清除 ASP.NET Session 變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM