我试图弄清楚在FormsAuthenticationTicket类上找到的isPersistent属性的用途。http://msdn.microsoft.com/en-us/library/kybcs83h.aspx
isPersistent设置为true和false?该属性似乎是多余的,因为我发现在浏览器会话中保留我的用户身份验证cookie的唯一方法是设置在创建票证后创建的cookie的Expires属性;即使tickets isPersistent的值被设置为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。这基本上表明,即使将isPersistent标志设置为https://github.com/chrismoutray/AuthSample,跨浏览器授权也不起作用。
发布于 2012-04-27 15:57:18
在Framework1.0/1.1中,将IsPersistent设置为true将设置cookie的过期时间为50年。
在2.0版中,对其进行了更改,使cookie的过期时间与表单身份验证超时属性相匹配。因此,您可以将IsPersistent设置为true,但cookie将始终在表单身份验证超时后过期。
如果您希望在不修改窗体身份验证超时的情况下获得较长的过期时间,则您的代码可以解决此问题。
编辑:我已经下载了您的示例,并将您的cookie代码替换为
FormsAuthentication.SetAuthCookie(model.UserName, true);它的工作与预期一样:将两天配置为表单超时,我的cookie将在两天后过期。
https://stackoverflow.com/questions/10345817
复制相似问题