【问题标题】:asp.net form authentication timeout settings ignoredasp.net 表单身份验证超时设置被忽略
【发布时间】:2014-07-13 23:39:52
【问题描述】:

在 web.config 中,我配置表单身份验证如下:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login.aspx"
        timeout="20"
        slidingExpiration="true"/>
</authentication>

最初,ASPXAUTH cookie 设置正确。使用 Firefox 的 cookie 查看器我可以看到 cookie 并且有效期是正确的(20 分钟)。

滑动到期还可以正确设置更新的 cookie(增加了 20 分钟)。

但此后任何新的 http 请求(即使在接下来的 5 分钟内发出)都会导致 302 错误并重定向到 Login.aspx,就好像身份验证已过期一样。

申请详情如下: 目标asp.net 4 iis 7.5 共享主机,但有专用池(回收没有帮助)。 Login.aspx 使用 asp Login 控件进行身份验证(无自定义 cookie)。

有什么想法吗?

【问题讨论】:

    标签: asp.net authentication timeout


    【解决方案1】:

    这可能有很多原因。

    这是否也在您的本地计算机上发生?您是否可能在 web.config 中配置了与您的本地主机环境不匹配的 httpCookie 域?

    您是否配置了机器密钥(验证/加密)?这在负载平衡场景中可能很重要。

    您在 IIS 中使用动态内容缓存吗?

    查看您的事件日志。默认情况下,基于表单身份验证失败的 302 错误会记录在那里。是否有任何条目说明您为何被视为未经身份验证?它可以帮助确定根本原因(票证过期、无法解密等)

    另外请记住,表单身份验证 cookie 的过期时间不会在每个请求上延长。在经过 50% 的原始超时(在您的情况下为 10 分钟)后,将刷新表单身份验证 cookie。所以适当地配置你的会话超时。

    【讨论】:

    • 1) 不,在本地机器上一切正常。 2)我没有使用 machineKey,但我目前正在测试。 3)FWIW,我的主人回答说我不能使用会话,因为这是共享主机。但我只使用表单身份验证(没有会话变量)。表单身份验证是否依赖于会话?如果是这样,有没有办法配置它?
    • 不,但是人们经常看到会话生命周期与身份验证有关。因此,如果会话超时,表单身份验证 cookie 将被删除。但是,如果所述问题仅存在于服务器上,您是否已将 http CookieDomain 添加到您的 web.config 中?还要检查成功登录后的响应头是否包含“Set-Cookie”键。此外,如果您在登录后单击页面,则 cookie 应该是请求标头的一部分。
    • Firefox 的网络监视器表明 cookie 是每个请求的一部分。无论如何,我已经添加了 machineKey 并做到了到目前为止......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2018-04-03
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多