我正试图了解isPersistent
课程中找到的FormsAuthenticationTicket
属性的目的。 http://msdn.microsoft.com/en-us/library/kybcs83h.aspx
isPersistent
设置为true和false?该属性似乎是多余的,因为我发现在浏览器会话中持久保存用户身份验证cookie的唯一方法是设置创建故障单后创建的cookie的Expires
属性;即使票证持续值设置为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,跨浏览器授权也不起作用。
答案 0 :(得分:9)
在框架1.0 / 1.1中,将IsPersistent设置为true会将cookie的有效期设置为50年 在版本2.0中,它已更改,因此cookie的过期与表单身份验证超时属性匹配。因此,您可以将IsPersistent设置为true,但cookie将始终在表单身份验证超时期限后过期 如果您想要很长的有效期而不修改表单身份验证超时,那么您的代码可以解决问题。
编辑:我已下载您的示例并使用
替换您的Cookie代码 FormsAuthentication.SetAuthCookie(model.UserName, true);
它正在按预期工作:如果您的表单超时已配置两天,我的Cookie将在两天后过期。