Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 申请永久财产身份证的目的是什么?_C#_Asp.net_Authentication - Fatal编程技术网

C# 申请永久财产身份证的目的是什么?

C# 申请永久财产身份证的目的是什么?,c#,asp.net,authentication,C#,Asp.net,Authentication,我正试图弄清楚表单身份验证票证类上的isPersistent属性的用途 设置iPersistent works时是否存在场景 在什么情况下,我希望将isPersistent设置为true和false 该属性似乎是多余的,因为我发现在浏览器会话中持久保存用户身份验证cookie的唯一方法是设置创建票证后创建的cookie的Expires属性;即使tickets isPersistent值设置为false 我还发现,将票据到期时间(而不是cookie)设置为10秒左右,并将ispersist设置为t

我正试图弄清楚
表单身份验证票证
类上的
isPersistent
属性的用途

  • 设置iPersistent works时是否存在场景
  • 在什么情况下,我希望将
    isPersistent
    设置为true和false
  • 该属性似乎是多余的,因为我发现在浏览器会话中持久保存用户身份验证cookie的唯一方法是设置创建票证后创建的cookie的
    Expires
    属性;即使tickets isPersistent值设置为
    false

    我还发现,将票据到期时间(而不是cookie)设置为10秒左右,并将
    ispersist
    设置为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创建了一个示例应用程序。这基本上表明,即使将isPersistent标志设置为true,跨浏览器授权也不起作用。

    在framework 1.0/1.1中,将isPersistent设置为true会将cookie的过期时间设置为50年。
    在版本2.0中,对其进行了更改,以便cookie的过期时间与表单身份验证超时属性相匹配。因此,您可以将IsPersistent设置为true,但cookie将始终在表单身份验证超时后过期。
    如果您希望在不修改表单身份验证超时的情况下获得较长的过期时间,那么您的代码就可以做到这一点

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

     FormsAuthentication.SetAuthCookie(model.UserName, true);
    

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

    我觉得我遗漏了什么,除非我专门设置cookies
    Expires
    字段,否则cookie将不会持久。设置IsPersistent无效。如果将IsPersistent设置为true,则生成的cookie的过期日期将为now+forms timeout。这不是你的情况?当然不是-如果我删除行
    cookie.Expires=DateTime.Now.AddYears(1)登录名的“记住我”功能不起作用,即使iPersistent设置为true
    cookie.Expires
    的值为
    01/01/0001 00:00:00
    ,与票证到期值不匹配。我多次看到相同的问题,问为什么为auth票证设置isPersistent不起作用;通常后面是设置cookies到期日期的标准答案,如我的代码示例所示。