セッションが終了または期限切れになったときにユーザーをログアウトするための最良の方法は何ですか?
助けてくれてありがとう。
それは本当にあなたが探している望ましい機能に依存します。FormsAuthenticationを使用していると仮定します。
気にする必要があるのは、SessionとFormsAuthenticationCookieの2つです。私が間違っていない限り、これらは両方とも別々のタイムアウトがあります。
セッションがタイムアウトしたが、ユーザーがまだ認証されているという問題がある場合は、次の組み合わせを試すことができます。
1:認証Cookieのタイムアウト値がセッションと同じであることを確認します。
<authentication mode="Forms"><forms ... timeout="20" ... ><authentication>
<sessionState ... timeout="20" ... />
2:Page_Loadイベントで、セッションがタイムアウトしたかどうかを確認します。
if (context.Session != null && Context.Session.IsNewSession == true &&
Page.Request.Headers["Cookie"] != null &&
Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0)
{
// session has timed out, log out the user
if (Page.Request.IsAuthenticated)
{
FormsAuthentication.SignOut();
}
// redirect to timeout page
Page.Response.Redirect("/Timeout.aspx");
}
(セッションタイムアウトの検出については、 http://www.eggheadcafe.com/articles/20051228.aspを参照してください)
より快適なユーザーエクスペリエンスが必要な場合は、JavaScriptを使用して、X分後に何らかのモーダルUIポップアップを開始できます。このポップアップにより、ユーザーはボタンクリックを開始してサーバー上でAJAXポストバックをトリガーできるため、ページをリロードしなくても認証とセッションCookieを拡張できます。私はこれまでこれを実装したことがありませんが、見てください、この男はASP.NET AJAXコントロールを作成しました!
.netメンバーシッププロバイダーを使用している場合は、web.confighttp://msdn.microsoft.com/en-us/library/h6bb9cz9(v=VS.100).aspxでタイムアウト設定を設定するだけです 。