20

我正试图弄清楚课堂isPersistent上发现的财产的目的FormsAuthenticationTickethttp://msdn.microsoft.com/en-us/library/kybcs83h.aspx

  1. 设置 isPersistent 工作时是否有场景?
  2. 在什么情况下我想设置isPersistent为真和假?

该属性似乎是多余的,因为我发现在浏览器会话中保留我的用户身份验证 cookie 的唯一方法是设置Expires票证创建后创建的 cookie 的属性;即使票证的 isPersistent 值设置为false.

我还发现将票证到期时间(不是 cookie)设置为 10 秒并isPersistent设置为 true 几乎没有效果;票证将在 10 秒后过期。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    identity.Name,
    DateTime.Now,
    DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
    isPersistent,
    JsonSerializerService.ToJson(identity),
    FormsAuthentication.FormsCookiePath);

string encryptedTicket = FormsAuthentication.Encrypt(ticket);

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

cookie.Path = FormsAuthentication.FormsCookiePath;

cookie.Expires = DateTime.Now.AddYears(1); // good for one year

我很感激我可以将上面的代码更改为可选设置expires

if (isPersistent)
    cookie.Expires = DateTime.Now.AddYears(1); // good for one year

已在@GitHub 创建了一个示例应用程序。https://github.com/chrismoutray/AuthSample这基本上表明,即使将 isPersistent 标志设置为 true,跨浏览器授权也不起作用。

4

1 回答 1

10

在框架 1.0/1.1 中,将 IsPersistent 设置为 true 会将 cookie 设置为 50 年的到期时间。
在 2.0 版中,它已更改,因此 cookie 的过期时间与表单身份验证超时属性相匹配。因此,您可以将 IsPersistent 设置为 true,但 cookie 将始终在表单身份验证超时期限后过期。
如果您想要较长的有效期而不修改表单身份验证超时,您的代码就可以解决问题。

编辑:我已经下载了您的示例并将您的 cookie 代码替换为

 FormsAuthentication.SetAuthCookie(model.UserName, true);

它按预期工作:将两天配置为表单超时,我的 cookie 将在两天后过期。

于 2012-04-27T07:57:18.083 回答