スーパーバイザーや他のユーザーが使用している職場システムのタブが閉じられたときに、セッションから完全に中断しようとしています。その人がログアウトすると成功です-すべてがクリアされます。ただし、タブが閉じられている場合、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 "";
}
ブレークポイントを設定し、ステップ スルーしてコードが返されるときにコードが実行されるのを監視します。タブが閉じてから、右クリックして「閉じたタブを再度開く」を選択すると、ページが戻ってきて、セッションがまだアクティブです。
これは不可能だと言っているpplがここにありますが、コードがサーバー上で実行されているため、理由がわかりません-私はそれが実行されているのを見ていますが、セッションはクリアされていません。これが「Session.Clear()」と「Session.Abandon()」への明示的な呼び出しのポイントだと思っていたでしょう。ログアウト Page_Load の同じコードはうまく機能します。
なんで?私は何が欠けていますか?タブが閉じているため、実行後にセッションクリアがスローされていますか?
ありがとう!