1

スーパーバイザーや他のユーザーが使用している職場システムのタブが閉じられたときに、セッションから完全に中断しようとしています。その人がログアウトすると成功です-すべてがクリアされます。ただし、タブが閉じられている場合、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 の同じコードはうまく機能します。

なんで?私は何が欠けていますか?タブが閉じているため、実行後にセッションクリアがスローされていますか?

ありがとう!

4

1 に答える 1