【问题标题】:Extend forms authentication timeout dynamically动态延长表单身份验证超时
【发布时间】:2014-04-01 17:17:44
【问题描述】:

我不确定这是如何形成身份验证的。但我假设它只是根据表单身份验证超时创建 cookie。

因此,鉴于我正在尝试根据发送到服务器的某些标头来增加表单身份验证 cookie 的过期时间。为此,我禁用了slidingExpiration,以便自行计算到期时间。

Application_BeginRequest我正在做:

if (!bypassSlidingExpiration)
{
    var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    authCookie.Expires = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes);
    Response.Cookies.Add(authCookie);
}

但不管bypassSlidingExpiration 我的会话在FormsAuthentication.Timeout 之后过期。

我这里出了什么问题?

【问题讨论】:

    标签: c# asp.net cookies timeout forms-authentication


    【解决方案1】:

    你在做什么其他代码分支?看起来您只处理bypassSlidingExpiration 为假的情况。如果bypassSlidingExpiration 为真,那么您将采用默认值(30 分钟,或任何在 web.config 中或以编程方式指定的值)。

    您可以考虑使用FormsAuthentication.SetAuthCookie(username, true) 绕过滑动到期。第二个参数是cookie是否应该是持久的。最好避免手动操作 cookie。如果出于某种原因你必须这样做,这样的事情可能会起作用:

    if (bypassSlidingExpiration)
    {
        var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
        authCookie.Expires = DateTime.MaxValue;
        Response.Cookies.Add(authCookie);
    }
    

    【讨论】:

    • 不幸的是,authCookie.Expires 在所有情况下都非常奇怪 01/01/0001 00:00:00 但我将其设置为我想要的 Application_EndRequest 值,它返回到浏览器的正确值。但是我有一些情况我不需要延长到期时间,但在这些情况下,cookie 每 30 秒延长一次
    • @Vladimir 尝试将更新后的 cookie 添加到响应而不是请求中。请参阅我的答案的编辑。
    • 我更新问题。经过一些尝试,我在我的代码中找到并替换了它(但忘记更新问题),但它仍然无法按预期工作。我能做的最好的就是一直为 Expires 字段分配一些值,因为有时它在某处被覆盖。只有在我解密那张票后,我才能得到正确的日期。
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 2017-03-30
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多