12

セッションが終了または期限切れになったときにユーザーをログアウトするための最良の方法は何ですか?

助けてくれてありがとう。

4

2 に答える 2

12

それは本当にあなたが探している望ましい機能に依存します。FormsAuthenticationを使用していると仮定します。

気にする必要があるのは、SessionFormsAuthenticationCookieの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コントロールを作成しました

于 2010-12-11T00:08:39.593 に答える
1

.netメンバーシッププロバイダーを使用している場合は、web.confighttp://msdn.microsoft.com/en-us/library/h6bb9cz9(v=VS.100).aspxでタイムアウト設定を設定するだけです

于 2010-12-10T22:33:46.823 に答える