當主管和其他人使用的工作場所繫統關閉標籤時,我一直試圖從會話中獲得一個乾淨的休息時間。當這個人註銷時,我是成功的 - 全部被清除。但是,關閉選項卡時,可以隨意重新打開,就像從未調用session.clear()一樣。當我看到它運行時,Asp.Net Session.Clear()爲什麼不能在關閉選項卡上工作?
我使用這個JavaScript:
$.ajax({
type: "POST",
url: "default.aspx/EndSession",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) { }
});
調用這個Web方法:
[WebMethod]
public static string EndSession()
{
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
HttpContext.Current.User = null;
FormsAuthentication.SignOut();
return "";
}
我設置一個斷點,看代碼執行爲我一步通過它,它返回。選項卡關閉,然後我右鍵單擊並選擇「重新打開關閉的選項卡」,頁面返回並且會話仍處於活動狀態。
我看到here ppl說這是不可能的,但不明白爲什麼,因爲代碼在服務器上運行 - 我正在看它運行,並且會話沒有被清除。我原以爲這是對「Session.Clear()」和「Session.Abandon()」的顯式調用的要點。註銷Page_Load中的相同代碼很好。
爲什麼?我錯過了什麼?會話清除是否在運行後被拋出,因爲該選項卡已關閉?
謝謝!
請參閱[此答案](http://stackoverflow.com/a/14913314/151212)。海事組織,唯一真正的解決方案是存儲服務器端的東西,而不僅僅依賴於會話cookie。 – explunit 2013-04-29 15:53:26
現在標題這樣。會話可能會在多個選項卡中打開,因此會增加複雜性,但現在我將從您指出的建議開始。感謝您的信息 - 我會在成功時回覆(希望)。 – 2013-04-30 17:33:25