1

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

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

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

IE

hh:mm:ss

10:00:00 用户登录

10:01:10 回发发生

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

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

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

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

4

2 回答 2

1

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

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

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

从技术上讲,即使这应该发生在每个请求到达服务器时(不仅在一半超时消失之后)并且一些文档说它是如何完成的,但可能出于性能原因并没有这样做,并且一些浏览器似乎不喜欢设置 cookie经常这样。

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

于 2014-03-13T07:30:37.737 回答
0

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

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

于 2011-04-13T05:20:06.693 回答