3

我有 Session_Start 和 Session_End 事件的处理程序。当我第一次启动应用程序时,一切正常。如果我离开会话并且发生标准超时,我会观察我的 Session_End 抛出。我期待这种行为。

假设我在超时后回来并刷新页面。Session_Start 方法运行,但随后 Session_End 方法立即运行。我预计 Session_Start 和 Session_End 之间还有 15 分钟的空闲时间。

会有什么问题?

编辑:是的,相同的会话 ID。

编辑 2: Cookie 看起来应该在会话结束时过期。不知道为什么我不断得到这个 Session_Start/Session_End 循环。我也尝试过从 Session_End 调用 Session.Abandon(),但没有奏效。这也在 ASP.NET 开发服务器上运行。我还没有在真正的 IIS 服务器上尝试过。

4

5 回答 5

4

回答有点晚了,但它可能对遇到同样问题的其他用户有用.. 我经历过与您看到的相同的行为:Session_Start()并且Session_End()在第一次超时后为每个请求调用并且 SessionID 始终是相同的:

  1. 我用 ASP.NET 4.0 运行了相同的代码,问题就消失了。

  2. 作为 ASP.NET 2.0/3.5 中的一种解决方法,只需将任何内容放入会话集合 ( Session["dummy"] = "dummy") 中,Session_Start()就会Session_End()正常运行。

于 2010-03-04T13:45:32.707 回答
1

.Net 用他们的会话 cookie 做了一些时髦的事情,尤其是。与表单身份验证结合使用。我只是在猜测,但我认为客户端挂在 cookie 上,并且即使在其无效之后也将其重新发送到服务器,这(我在这里猜测)可能会触发会话的重新启动,此时它会识别出它的无效并将其丢弃,从而导致会话结束。

尝试:

  1. 确保您的 cookie 设置为正确过期
  2. 调用 Session.Abandon() 和 FormsAuthentication.SignOut()

不确定这是否有帮助,但 FWIW。

于 2009-03-30T16:23:43.603 回答
1

对于任何有同样问题的人。Alex B 给出的答案救了我。

这不再发生在 4.0 上,但是如果您在 Session_Start 处理程序内的 Session 中放置一些东西,这会切断 Session_Start -> Session_End 循环,您甚至不必删除 cookie。

于 2012-05-18T18:24:56.600 回答
0

您能否验证事件是否针对相同的会话 ID 触发?

于 2009-03-30T16:12:10.153 回答
0

这是这个问题的副本。

这是因为 ASP.NET 2.0/3.5 根据会话是否在使用来处理会话的方式。在正常情况下,它不会尝试在第一次使用会话之前保持会话,因此不会发出会话 cookie(如果它不存在)。第一次使用会话时会在服务器上创建会话并发出会话 cookie。

现在,当先前的会话重新启动但未使用时,ASP.NET 会有点混乱。它试图立即放弃未使用的(重新启动的)会话,因为它不是必需的,这会引发早期的 Session_End。但是,它不会删除预先存在的会话 cookie,因此每个后续请求都会重复该序列,重新启动然后终止会话,直到 cookie 被删除或会话被使用。

在 .Net 4.0 中,这种行为发生了变化,在这种情况下不再触发事件。

于 2011-08-28T01:08:47.143 回答