FormsAuthenticationTicket isPersistent属性的目的是什么?
我试图了解FormsAuthenticationTicket
类中找到的isPersistent
属性的目的。 http://msdn.microsoft.com/en-us/library/kybcs83h.aspx
- 是否存在设置isPersistent的情况?
- 在什么情况下我想将
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将在两天后过期。