FormsAuthenticationTicket isPersistent属性的目的是什么?

我试图了解FormsAuthenticationTicket类中找到的isPersistent属性的目的。 http://msdn.microsoft.com/en-us/library/kybcs83h.aspx

  1. 是否存在设置isPersistent的情况?
  2. 在什么情况下我想将isPersistent设置为true和false?

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

我还发现,将isPersistent设置为true,将票证到期时间(不是cookie)设置为10秒,效果不大; 门票在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,跨浏览器授权也不起作用。

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

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

  FormsAuthentication.SetAuthCookie(model.UserName, true); 

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