我正在尝试使用 ASP.NET 4.0 中的记住我功能来实现登录表单。
我已将 web.config 中的超时选项设置为 1 年 (525600),但在我登录后随机一段时间后,我总是被注销。
cookie 已正确创建,我可以在浏览器中以正确的过期值(2014 年 9 月)看到它,但似乎一段时间后 ASP.NET 环境不再读取此 cookie。
我尝试使用以下方式登录:
FormsAuthentication.RedirectFromLoginPage(username, true);
或者:
FormsAuthentication.SetAuthCookie(username, true);
Response.Redirect("/");
或使用此自定义代码:
DateTime expiryDate = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, userid, DateTime.Now, expiryDate, true, String.Empty);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authenticationCookie.Expires = ticket.Expiration;
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
Response.Cookies.Add(authenticationCookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl(username, false));
但结果总是一样的。cookie 存在,但一段时间后不再使用。
Web.config 是这样的:
<authentication mode="Forms">
<forms loginUrl="/login" defaultUrl="/" name="appName" path="/" timeout="525600" slidingExpiration="true"/>
</authentication>
奇怪的是,在我的本地测试环境(ASP.NET 开发服务器)中,一切正常。只有在生产环境中它不起作用!