FormsAuthenticationTicket isPersistent属性的目的是什么?

时间:2012-04-27 06:30:49

标签: c# asp.net authentication

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

  1. 是否存在设置isPersistent的情况?
  2. 在什么情况下我想将isPersistent设置为true和false?
  3. 该属性似乎是多余的,因为我发现在浏览器会话中持久保存用户身份验证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,跨浏览器授权也不起作用。

1 个答案:

答案 0 :(得分:9)

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

编辑:我已下载您的示例并使用

替换您的Cookie代码
 FormsAuthentication.SetAuthCookie(model.UserName, true);

它正在按预期工作:如果您的表单超时已配置两天,我的Cookie将在两天后过期。