5

私はこれを理解するのに最も苦労しています。FormAuthentication を使用しています。ユーザーがログインして、彼らが私を覚えていることを確認したら、ユーザーに24時間ログインしたままにしてもらいたいです。問題は、私が何をしても、ユーザーが 30 分後に自動的にログアウトされることです。ユーザーが私を記憶するように選択したので、永続的な Cookie を 24 時間後に期限切れになるように設定しました。ブラウザのオプションに Cookie が表示され、有効期限は正しいです。サイトを離れて、たとえば 1 時間後に戻るとします。ユーザーがログアウトされました......彼は私が持っているもののいくつかのコードスニペットです。

bool IsValid = Membership.ValidateUser(LoginControl.UserName, LoginControl.Password);

if (IsValid)
{
    e.Authenticated = true;

    if (LoginControl.RememberMeSet)
    {
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(LoginControl.UserName, true, 1440); // 1 day
        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
        cookie.Expires = authTicket.Expiration;
        HttpContext.Current.Response.Cookies.Set(cookie);
        Response.Redirect(FormsAuthentication.GetRedirectUrl(LoginControl.UserName, true), true);
        FormsAuthentication.SetAuthCookie(LoginControl.UserName, true);
        FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, true);
    }
    else
    {
        FormsAuthentication.SetAuthCookie(LoginControl.UserName, false);
        FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, false);
    }
}

これが私のweb.configです

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login.aspx" defaultUrl="/" timeout="1" cookieless="UseCookies"  protection="All" slidingExpiration="true" ticketCompatibilityMode="Framework40"/>
</authentication>

ユーザーが「私を記憶する」をチェックしない場合、非永続的な Cookie を設定し、非アクティブ状態が 1 分間続くとユーザーはログアウトします。これは正しく機能しています。問題は、記憶 Cookie が設定されていて、Cookie が存在するにもかかわらず、ユーザーがログインしていないことをユーザーが返す場合です。

4

1 に答える 1