【问题标题】:Controlling the FormsAuthentication createPersistentCookie expiration控制 FormsAuthentication createPersistentCookie 过期
【发布时间】:2012-04-26 17:43:17
【问题描述】:

在 ASP.NET MVC2 应用程序中,我们有标准的登录操作...

if (ValidateUser(model.Email, model.Password)
{
  FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe);
  ...

其中 SetAuthCookie 的第二个参数是 createPersistentCookie 并带有以下文档:

createPersistentCookie
  Type: System.Boolean
    true to create a persistent cookie
    (one that is saved across browser sessions); otherwise, false.

我们希望持久性 cookie 在 2 周后过期(即,用户可以在 2 周内返回网站而无需重新进行身份验证。在那之后,他们将被要求再次登录)。

我们如何设置持久 cookie 的过期时间?

【问题讨论】:

    标签: asp.net asp.net-mvc-2


    【解决方案1】:

    你不能这样做吗?

    <system.web>
        <authentication mode="Forms">
              <forms timeout="20160"/>
        </authentication>
    </system.web>
    

    超时以分钟为单位。

    此超时值与您是否正在创建持久性 cookie 无关。它只是说,如果您没有明确终止 cookie (FormsAuthentication.SignOut),它将在给定的时间段后自动过期。

    换句话说,如果你这样做:

    FormsAuthentication.SetAuthCookie(someMembershipName, false);
    

    将导致 cookie 在以下情况下过期:

    • 用户关闭浏览器,或
    • 已达到超时时间。

    与如果你这样做相反:

    FormsAuthentication.SetAuthCookie(someMembershipName, true);
    

    将导致cookie仅在达到超时时过期。

    HTH

    编辑

    取自MSDN

    timeout属性描述如下:

    指定时间,整数 分钟,之后 cookie 过期。如果 SlidingExpiration 属性为真,超时 属性是一个滑动值,过期 在指定的分钟数 在最后一次请求的时间之后 收到了。为防止受损 性能,并避免多个 浏览器警告 打开 cookie 警告,cookie 超过一半时更新 指定的时间已过。这有可能 造成精度损失。默认 是“30”(30 分钟)。

    注意在 ASP.NET V1.1 下持久化 cookie 不会超时,无论 超时属性的设置。 但是,从 ASP.NET V2.0 开始, 持久性 cookie 会超时 根据超时属性

    换句话说,此过期设置仅处理表单身份验证 cookie。

    表单身份验证 cookie 是一个客户端 cookie,它与您可能拥有的其他服务器端会话(即购物车)无关。

    该会话因以下设置而过期:

    <sessionstate 
          mode="inproc"
          cookieless="false" 
          timeout="20" 
    

    【讨论】:

    • 我的理解是这个超时控制会话过期。我们的会话超时时间约为 2 小时。并不是我们希望会话持续两周,而是让“记住我”cookie 持续那段时间。
    • 感谢您的跟进。我将使用 Firebug 和会话到期进行一些测试并报告回来。同时,+1,我已经接受了你的回答。再次感谢。
    • @Rob:不用担心,如果您发现任何问题,请告诉我(因为我们使用上述设置并且似乎在所有情况下都可以正常工作)
    • 您好, 的具体时间是多少? 20160 需要多长时间?