7

私のasp.netアプリケーションでは、ブラウザを閉じるか、タブ(複数のタブを含むブラウザの場合)を閉じるたびにセッションをクリアしたいと考えています。

この問題から抜け出すために私を導いてください...

4

7 に答える 7

11

Short version, No. There's no solid way of a server detecting if the client has closed their browser. It's just the nature of web development's asynchronous pattern.

Long version, if it's really, really important to you; Put a bit of javascript in the page that sends a regular post to your website in the background and set up a serverside agent or service that disposes of the sessions if it doesnt receive these regular "heartbeat" signals.

You can put a javascript postback onto the page's unload() event but dont rely on it, it doesnt always fire.

于 2012-11-06T09:20:53.927 に答える
2

これは、ブラウザを閉じるたびにデフォルトで発生します。これはASP.NETだけではありません。これは、セッション状態を持つほとんどのサーバー側プログラミング言語用です。基本的に、有効期限を指定せずに追加されたCookieは、ブラウザを閉じると削除されます。

これが当てはまらないのは、タブを閉じるときです。これは、タブを閉じるイベントがWebサーバーに返送されないため、制御できません。

于 2012-11-06T09:20:17.237 に答える
1

あなたはjavascriptでそれを行うことを試みることができます。でそれをチェックしてください:

http://www.codeproject.com/Tips/154801/How-to-end-user-session-when-browser-closed

于 2012-11-06T09:20:08.937 に答える
1

または、新しいブラウザを開くたびに以前のセッションの状態を確認し、前のセッションのSession.clear()またはSession.abandon()を実行することもできます。

これにより、アプリケーションを起動するたびに新しいセッションを取得できるようになります。

  1. .netアプリケーションでBasePageを使用します。
  2. ベースページの読み込み時にsession.sessionidを確認します。
  3. ベースページで新しいセッションを検出する方法の詳細。BasePage.Session.Link

これがShazに関して役立つことを願っています

public class BasePage : Page
{

            protected string mySessionId;   

            private CurrentUser _currentUser;
            public CurrentUser _CurrentUser
            {
                get { return ((CurrentUser)HttpContext.Current.Session["myCurrentUser"]); }
                set { _currentUser = value; }
            }


            protected override void OnLoad(EventArgs e)
            {

                if (Session["myCurrentUser"] != null)
                {
                    if (_CurrentUser.ProUser)
                    {

                       mySessionId = Session.SessionID; // it means New Session

                    }

                    if (!mySessionId.IsNullOrDefault() && mySessionId != Session.SessionID)
                    {
                        Session.Abandon(); //Abandon current session and start new one                

                    }
                }


            }

}
于 2012-11-06T09:57:25.497 に答える
0

cookiesここでのセッション管理の要件をより適切に満たすことができると思います。

これは、セッションデータをサーバーに保存するのではなく、通話に含める必要があることを意味します。これにより、サーバー上のデータをクリアすることを心配する必要がなくなります。

于 2012-11-06T09:20:13.213 に答える
-2

Global.aspx の Session_End イベントを使用できます

//For Specific Session
Session.Remove("SessionName");

//All the Session
Session.Abandon();
于 2012-11-06T09:43:31.200 に答える