【问题标题】:New session cookie issued halfway through FormsAuthenticationTicket timeoutFormsAuthenticationTicket 超时中途发布的新会话 cookie
【发布时间】:2011-08-04 09:11:59
【问题描述】:

我在我的 asp.net 4.0 应用程序(从 .NET 1.1 升级)中使用 Forms 身份验证。我显式地创建了 FormsAuthenticationTicket 对象,然后对其进行加密(使用 FormsAuthentication 方法),并将其以 cookie 的形式发送给客户端。我使用 FormsAuthentiation.RenewTicketIfExpired() 来设置身份验证 cookie 的滑动过期时间。

我可以使用 Fiddler 找出在 FormsAuthenticationTicket 超时中途发布的新会话 cookie。

如果表单验证超时 = 2 分钟,会话超时 = 20 分钟

hh:mm:ss

10:00:00 用户登录

10:01:10 回发发生

然后将重新创建一个新会话并注销。但我将会话设置为每 20 分钟超时一次。我尝试了不同的表单身份验证超时值,并且总是在超时的中途创建一个新会话。

我需要将表单身份验证超时设置为一个非常大的值以避免这种情况发生。

从.NET 1.1升级之前没有这个问题

有人知道为什么吗?这是在 asp.net 4.0 中处理滑动过期的错误吗?

【问题讨论】:

  • 为什么需要设置 FormsAuthentication Timeout(即在你的情况下为 2 分钟),只依靠 sessiontime out 看看是否能解决问题。
  • 问题是,如果我将表单身份验证超时设置为与会话超时相同,则超时发生在身份验证超时的一半。我想了解为什么它不能按预期工作。

标签: asp.net session timeout formsauthenticationticket


【解决方案1】:

即使问题很老也要写答案,以防有人像我一样碰到这个问题。

这不是错误,因为您有 SlidingExpiration=yes 这是默认设置,所以在超时中途发出新票。

当滑动到期时,FormsAuthentication 将重新发出 FormsAuthentication 票证,有效期为 x 分钟,其中 x 是您的表单身份验证超时设置,如果超过一半的超时期限已过。

从技术上讲,即使每个请求都会发生这种情况(不仅是在一半的超时时间消失之后)并且一些文档说它是如何完成的,但它可能不是为了性能而这样做的原因,有些浏览器似乎不喜欢频繁设置 cookie。

http://msdn.microsoft.com/en-us/library/system.web.configuration.formsauthenticationconfiguration.slidingexpiration.aspx

【讨论】:

    【解决方案2】:

    您的网站可能正在回收。这可能有几个原因。最近引起我注意的是站点目录结构发生变化(例如添加文件夹)。

    既然您知道它发生在哪里,请确保您没有造成任何回收。

    【讨论】:

    • 没有回收利用。当站点重新启动时我已经登录并且没有这样的日志记录。
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多