[英]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);
這將會話標記為 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.