【发布时间】:2012-04-06 00:19:56
【问题描述】:
我刚刚启动了我的第一个 MVC3 应用程序,除了 cookie 授权之外一切正常。当用户访问我的网站并登录时,我会设置一个包含该用户数据的 .ASPAUTH cookie。它运行良好,直到经过一段时间。然后我必须再次登录,即使 cookie 在浏览器中,我可以看到过期设置为一年后。它在我的本地主机上运行良好。 在我看来,它不是将我的信息设置到 cookie 中,而是以某种方式在会话中,但即使我在一小时内重新启动计算机,我仍然登录。但如果我在 1 小时内不访问网络,在那之后我退出了。
感谢您的帮助。
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
requestedUser.Name,
DateTime.Now,
DateTime.Now.AddYears(1),
true,
string.Format("{0};{1};{2}", requestedUser.IDUser.ToString(), requestedUser.IsAdmin.ToString(), profilePicture));
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.Expires = keepLogged == "keepLogged" ? DateTime.Now.AddYears(1) : DateTime.Now.AddHours(1);
this.Response.Cookies.Add(cookie);
return RedirectToAction("Index", "Posts");
【问题讨论】:
-
可能由于空闲超时导致的应用程序池重启导致会话 cookie 无效 - 请参阅 stackoverflow.com/questions/4277944/…
-
您能在设置表单身份验证的位置显示代码吗?
-
@tawman 感谢您的帮助,但我可以在客户端的浏览器上看到 cookie,为什么应用程序看不到?对不起,蹩脚的问题,但我真的必须解决这个问题,不明白出了什么问题。
-
@PetrMares 客户端 cookie 仅与服务器端对其存在的回忆一样有效。一旦应用程序池回收,服务器端会话管理就不会存储客户端 cookie 提供的令牌。您可以使用数据库在服务器端持久化会话 cookie 以解决此问题。
-
@DavidHoerster:我添加了代码。
标签: c# asp.net asp.net-mvc-3 session-cookies