私はこれを理解するのに最も苦労しています。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 が存在するにもかかわらず、ユーザーがログインしていないことをユーザーが返す場合です。