2012-02-20 145 views
1

Asp.Netでフォーム認証を使用しています。4.ユーザーがログアウトリンクをクリックした時点でセッションをクリアしてFormsAuthentication.SignOut()に電話をかけ、もう一度ログインせずにサイトに戻ります。ブラウザまたはタブを閉じるとAsp.Netセッションが終了する

今ブラウザまたはタブが閉じられたときにセッションを終了したいとします。私はonbeforeunloadイベントを処理することでこれを試みましたが、内部リンクをクリックした後にセッションが終了しました。

どうすればいいですか?

答えて

1

認証クッキーはセッションのみです、これはブラウザがブラウザを閉じるときに削除することを意味します。たぶんすべてのブラウザのタブを閉じるわけではないかもしれませんが、閉じるとすべての認証Cookieが失われます。

タブを閉じると、ユーザーに別のタブが開いているかどうかわかりません。

可能な解決策は、この認証をアクティブにしておくかどうかを10秒ごとにコールし、20秒後に認証を設定することです。だから、もし何も信号が戻ってこないと、ユーザーは行ってしまったのです。これはjavascriptを使用して行うことができます。一方、これは、ユーザーが数分間何も操作しなくてもログアウトできないため、このロジックを他のものと組み合わせる必要があります。

+0

FormsAuthenticationを使用すると、ブラウザセッション間でログインできます。そのため、Webで設定できるタイムアウト値が存在します。どの人がアクティブになってほしいと言いたいのかを設定します。 –

0

ユーザーが明示的にログアウトしてSession.Abandon()に電話をかけて、そのユーザーのセッションを削除することが最善の方法です。しかし、他の人のように、タブ/ウィンドウがこのような方法でログアウトせずに閉じるかどうかを知る方法がないと言っています。セッションは期限切れになるまでサーバー上でハングアップします。

0

ライブサイトのweb.configを編集したときにセッションが終了する問題がありました。彼らはまだセッション変数でログインしているユーザーを追跡していました(危険です)。しかし、ここで人々を助けることができる解決策(テストされていない解決策)が思いつきました。

FormsAuthenticationでは、アクティブでログインしている人を無期限に維持することができます。しかし、例えば、 20分でログアウトされ、うれしいです。タイムアウト値を0に設定するとブラウザが閉じることができない(それを待っている)ときにログアウトするようにするには、常にログインしてから再度ログアウトする必要があります。

解決策:FormsAuthenticationを使用してログインしたときに、ブラウザを閉じるときに削除される標準セッション変数クッキーを設定することもできます。このクッキーには、アカウント以外の関連性のない情報が含まれています。ちょうど単純な "loggedIn:はい"です。

これで、すべてのコードがmasterpage/materlayout上にある必要があります。ページサイクル(またはカスタム属性)のページサイクルまたはコンストラクタで、CookieとユーザーIDの両方をチェックする上位レベルの呼び出しです。

if(!HasLoginCookie() || !System.Web.HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    // redirect user to log in page. 
} 

基本的に、ブラウザを閉じたときにCookieが削除された場合は、ユーザーをログインページにリダイレクトします。

うまくいけば、うまくいけば(私がテストしなかったように)うまくいきます。

関連する問題