簡體   English   中英

如何終止會話或會話 ID (ASP.NET/C#)

[英]How to Kill A Session or Session ID (ASP.NET/C#)

當用戶單擊注銷按鈕時,如何銷毀會話 (Session["Name"])?

我正在查看 MSDN 上的 ASP.NET API 參考,它似乎沒有太多信息。 好像比較有限。 但是我找不到 ASP.NET 類等的任何其他頁面。

我試過了:

Session.Abandon(); Session.Contents.Remove("Name"); 他們都沒有工作。 (我在 Google 搜索的論壇中找到了這些)

Abandon方法應該有效( MSDN ):

Session.Abandon();

如果要從會話中刪除特定項目,請使用 ( MSDN ):

Session.Remove("YourItem");

編輯:如果您只想清除一個值,您可以執行以下操作:

Session["YourItem"] = null;

如果要清除所有鍵,請執行以下操作:

Session.Clear();

如果這些都不適合你,那么就會發生一些可疑的事情。 我會檢查您在何處分配值,並驗證在您清除該值后它沒有被重新分配。

簡單的檢查做:

Session["YourKey"] = "Test";  // creates the key
Session.Remove("YourKey");    // removes the key
bool gone = (Session["YourKey"] == null);   // tests that the remove worked

指示客戶端瀏覽器清除會話 ID cookie 值也是一個好主意。

Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);

Session.Abandon()

這將會話標記為 Abandoned,但此時會話實際上不會被 Abandoned,請求必須首先完成。

根據我的測試:

Session.Abandon(); // Does nothing
Session.Clear();   // Removes the data contained in the session

Example:
001: Session["test"] = "test";
002: Session.Abandon();
003: Print(Session["test"]); // Outputs: "test"

Session.Abandon 只將會話對象中的布爾標志設置為 true。 調用Web服務器可以反應到或沒有,但沒有造成ASP立即采取行動。 (我用 .net-Reflector 自己檢查過)

事實上,您可以通過點擊瀏覽器的后退按鈕繼續使用舊會話,然后繼續正常瀏覽整個網站。

所以,總結一下:使用 Session.Clear() 並避免挫折。

備注:我已經在 ASP.net 開發服務器上測試了這種行為。 實際 IIS 的行為可能有所不同。

Session["YourItem"] = "";

在 .net razor 網頁中效果很好。

Session.Abandon(); 也不適合我。

我必須編寫它才能讓它工作的方式是這樣的。 也可能對你有用。

HttpContext.Current.Session.Abandon();

Session.Abandon()這將破壞數據。

請注意,這不一定會真正從用戶那里刪除會話令牌,並且稍后可能會使用相同的會話令牌作為具有相同 ID 的新會話被拾取並創建,因為它被認為是可以使用的公平游戲。

你像這樣殺死一個會話:

Session.Abandon()

但是,如果您只想清空會話,請使用:

Session.Clear()
Session.Abandon()

是你應該使用的。 事情在幕后 asp.net 會破壞會話,但會在下一個頁面請求時立即為用戶提供一個全新的會話。 因此,如果您正在檢查會話是否在調用放棄后立即消失,它將看起來不起作用。

-列出項目xasadads

暫無
暫無

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

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