ユーザーがタブまたはブラウザーを閉じたときにユーザーをサインアウトする必要があります。ASP.NETMVCでそれを行うにはどうすればよいですか?
ブラウザーを閉じたときにユーザーがログアウトしていることを確認するには、いくつかの方法がありますが、それはFormsAuthentication Cookieの設定方法によって異なります。
Cookieless=True
_を使用します。FormsAuthentication.SetAuthCookie
_を使用して永続性をfalse
に設定しますwindow.unload
_のCookieを削除します。Cookieless=True
_アプローチ:_<system.web>
<authentication mode="Forms">
<forms loginUrl="/Account/Login"
protection="All"
cookieless="true" //set to true
</authentication>
</system.web>
_
これにより、各リクエストのクエリ文字列にcookie値が追加されます。このアプローチの問題は、あまり安全ではなく、SEOに干渉することです。ユーザーが使用しているURLを誰かに送信した場合、そのユーザーは元のユーザーとしてログインできます(たぶん、あなたが望んでいるものではありません)。 「SEOをいじる」限り、渡されるURLに基づいて、同じページがgooglebotとは異なって見えます。QueryStringを変更するたびに、新しいURLになり、誰かがこれを使用してリンクを投稿した場合。特定の実際のURLの検索結果を希釈します。
FormsAuthenticationTicket
アプローチユーザーの認証Cookieを設定するときは、PersistentをFalse
に設定します。
_FormsAuthentication.SetAuthCookie
_でこれを行っている場合、これがデフォルトです。 FormsAuthenticationTicket
クラスを使用する場合は、Cookieの有効期限を指定する必要があります。
_FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, //version
"blah", //Cookie Name
);
_
FormsAuthentication.SetAuthCookie()
アプローチデフォルトでは、persistent
を設定しない場合、認証Cookieはセッションの終了時(ユーザーがブラウザーを閉じたとき)に期限切れになります。
_FormsAuthentication.SetAuthCookie("CookieValue", false); //second argument is persistent'
_
絶対確実な方法はありません。できることは Cookieの有効期限を今より前に設定すること で、ユーザーのブラウザが協調して動作することを願っています。本当に、本当に、本当にCookieを削除したい場合は、いつでもJavaScriptのアプローチを試すことができますが、ユーザーがJavaScriptを無効にしている場合は機能しません。
_window.addEventListener('unload', function(event) {
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
});
_
また、使用するブラウザも重要です。 Chrome=バックグラウンドで実行する機能があり、 タイムアウトになるまでセッションCookieを保持します-ブラウザが閉じてもドロップされません (私はこれを難しい方法で見つけました)。