私のasp.netアプリケーションでは、ブラウザを閉じるか、タブ(複数のタブを含むブラウザの場合)を閉じるたびにセッションをクリアしたいと考えています。
この問題から抜け出すために私を導いてください...
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.
これは、ブラウザを閉じるたびにデフォルトで発生します。これはASP.NETだけではありません。これは、セッション状態を持つほとんどのサーバー側プログラミング言語用です。基本的に、有効期限を指定せずに追加されたCookieは、ブラウザを閉じると削除されます。
これが当てはまらないのは、タブを閉じるときです。これは、タブを閉じるイベントがWebサーバーに返送されないため、制御できません。
あなたはjavascriptでそれを行うことを試みることができます。でそれをチェックしてください:
http://www.codeproject.com/Tips/154801/How-to-end-user-session-when-browser-closed
または、新しいブラウザを開くたびに以前のセッションの状態を確認し、前のセッションのSession.clear()またはSession.abandon()を実行することもできます。
これにより、アプリケーションを起動するたびに新しいセッションを取得できるようになります。
これが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
}
}
}
}
cookies
ここでのセッション管理の要件をより適切に満たすことができると思います。
これは、セッションデータをサーバーに保存するのではなく、通話に含める必要があることを意味します。これにより、サーバー上のデータをクリアすることを心配する必要がなくなります。
Global.aspx の Session_End イベントを使用できます
//For Specific Session
Session.Remove("SessionName");
//All the Session
Session.Abandon();