0

アプリケーションに、ユーザーが無期限にログに記録されたままにすることを確認できる機能が必要です(Cookieの有効期限を今から3か月に任意に設定します)。

これに対処するために私が持っているコードは

private static HttpCookie GetFormsAuthenticationCookie(string userNameResponse, 
                                                        bool persistCookie)
{            
    var cookie = FormsAuthentication.GetAuthCookie(userNameResponse, persistCookie);

    if (persistCookie)
        cookie.Expires = DateTime.Now.AddMonths(3);

    return cookie;
}

private void LoginUser(string userNameResponse, bool PersistCookie)
{
    Response.Cookies.Add(GetFormsAuthenticationCookie(userNameResponse, PersistCookie));

    string navigateAfterUrl = FormsAuthentication.GetRedirectUrl(userNameResponse,
                                                                 PersistCookie);

    Response.Redirect(navigateAfterUrl);
}

ただし、後でサイトに戻ったときに、再度ログインする必要があります。Cookieが有効期限とともに返され、セッションCookieとして設定されていないことを確認しました(ブラウザを閉じたり再度開いたりしてもテストされ、Cookieはまだ存在します)。私の考えでは、ASP.NETがセッションを期限切れにしたときと関係があると思います。

web.configに特定のマシンキーを設定しているので、IISが再起動された場合などに同じCookieが機能しないようにする必要がありますか?私は他に何もすることが考えられないので、誰かがこれを引き起こしている可能性があるか、少なくともこれをさらに追跡する方法について何か提案がありますか?

4

1 に答える 1

1

GetAuthCookieメソッドを呼び出すと、web.configのTimeoutプロパティで指定されたタイムアウトを使用してFormsAuthenticationTicketが作成されます。したがって、必ず正しく設定してください。

<authentication mode="Forms">
  <forms
    loginUrl="/someloginUrl"
    requireSSL="true"
    protection="All"
    // This is the setting you are looking for! (it's in seconds)
    timeout="120"
    domain="example.com"
    slidingExpiration="false"
    name="cookieName" />
</authentication>

チケットが暗号化されると、Cookieの値として使用されます。CookieのExpiresプロパティを特定の値に設定すると、これは、Cookieが特定の期間クライアントコンピューターに保持されることを示します。次に、要求ごとにASP.NETランタイムはCookieの存在を確認し、値を復号化してチケットを取得しようとします。次に、Timeoutプロパティを使用してチケットがまだ有効かどうかを確認します。そのため、タイムアウトが短い場合は、Cookieが送信されていても、チケットは無効になり、認証は失敗します。

于 2009-10-26T19:52:03.080 に答える