4

我正在生成一个 FormsAuthentication 票证,并将其存储在一个 cookie 中,我将其与 MVC AuthorizeAttribute 一起使用以提供授权。现在,我得到了它,所以如果我选中了“保持登录”复选框,cookie 就不会过期,(我只是将 cookie.expires 更改为 now + 1 年,用于测试目的,当他们'已检查以保持登录状态)。

但是,即使我在创建票证时设置了 cookie 是持久的,但票证在超时期限后仍然停止工作。

这是我创建 AuthTicket 的代码:

var now = DateTime.UtcNow.ToLocalTime();
FormsAuthenticationTicket authTicket = new System.Web.Security.FormsAuthenticationTicket(1, username, now, now.Add(FormsAuthentication.Timeout), rememberMe, username, FormsAuthentication.FormsCookiePath);
string encryptedTicket = System.Web.Security.FormsAuthentication.Encrypt(authTicket);
return encryptedTicket;

这与我设置为 cookie 的 encryptedTicket 相同。任何人都知道我怎样才能让这张票超过 FormsAuthentication 超时?我只需要手动弄乱 FormsAuthentication Timeout 时间吗?

4

1 回答 1

4

cookie 停留的时间与登录保持有效的时间不同。基本上,持久性 cookie 是“浏览器关闭后是否应该保留此 cookie”,并且与此登录的有效时间无关。例如,您可以使用它来存储用户名,以便用户在返回时不必重新输入此信息。

如果 cookie 有效,但 cookie 内的登录已过期,您将需要重新登录。如果您希望您的登录持续更长时间,您需要<forms>在 web.config 中延长您标签上的时间,或者您可以在代码中执行此操作,但是如果您想延长/缩短到期时间,则需要重新编译。

以下是一些进一步解释这些概念的网站:

http://software-security.sans.org/blog/2012/04/05/forms-authentication-remember-me-its-hard-not-too

Cookie 与 FormsAuthentication.SetAuthCookie() 方法混淆

于 2012-08-06T21:53:12.643 回答