1

フォーム認証を使用している場合、ASP.NET セッションの有効期限が切れる日時を特定することはできますか?

セッションの有効期限が近づいたときにユーザーに警告したいと思います。セッション状態はなく、スライド有効期限は無効になっています。system.web 設定の一部を次に示します。

<authentication mode="Forms">
  <forms defaultUrl="Default.aspx" loginUrl="Login.aspx" requireSSL="false" enableCrossAppRedirects="true" cookieless="AutoDetect" timeout="2" slidingExpiration="false"/>
</authentication>

<sessionState mode="Off"/>

セッションのタイムアウト/有効期間は簡単に決定できますが、ユーザーがセッション ウィンドウ内でページを更新した場合、再読み込み時に有効期間の値を日時に追加しても正確ではありません。

値として暗号化されたチケットを含む認証 Cookie を使用すると、FormsAuthenticationTicketそれを復号化して有効期限の日時を取得できます。

一部の AJAX 呼び出しが行われる可能性がありますが、ユーザーは Web サーバーへのポストバックやリクエストなしで UI を操作する可能性があります。

Cookie を使用せずにこの種の動作を実現する方法についてのアイデアはありますか?

4

1 に答える 1

2

同様の問題があります。私の場合、ユーザー数が少ないため、ページで ajax 呼び出しをポーリングしてサーバーにコールバックし、有効期限チケットを確認することで、より良いユーザー エクスペリエンスを選択しています。ajaxルートに行きたくない場合は、以下のコードを微調整し、httpを介してページに有効期限情報を含め、クライアントjavascriptで時間を追跡することで回避できる場合があります。

        if (User.Identity.IsAuthenticated)
        {
            var identity = (FormsIdentity)User.Identity;    
            viewModel.UtcInactivityExpiryDate = identity.Ticket.Expiration.ToUniversalTime();                
        }

ajax ルートを使用する場合は、別の問題があります。非アクティブ タイムアウトを使用している場合は、ajax 呼び出し自体が非アクティブ タイムアウトを更新しないようにする必要があります。これを行うには、新しい認証 Cookie を元の認証 Cookie で上書きします。あなたのajaxリクエストの最後に。

            var requestCookie = HttpContext.Current.Request.Cookies[".ASPXAUTH"];
            if (requestCookie != null)
            {
                HttpContext.Current.Response.Cookies.Add(requestCookie);
            }
于 2015-03-06T02:52:41.520 に答える