0

我正在尝试使用 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 开发服务器)中,一切正常。只有在生产环境中它不起作用!

4

1 回答 1

0

@Felipe Garcia:我不知道我是否使用负载平衡器,我在公共服务器上。但是我尝试按照您所说的配置 MachineKey(在此处使用生成器),现在它似乎可以正常工作!

谢谢!

于 2013-09-15T08:44:54.047 回答