18

Web.Config在 ASP.NET MVC 2 项目中配置了我的文件如下:

<sessionState mode="InProc" timeout="1"/>

并在中添加以下内容Global.asax.cs

protected void Session_End(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_End");
}

protected void Session_Start(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_Start");
}

Session_Start()当新用户访问网站时调用。我本来希望Session_End()在 1 分钟的空闲时间后被呼叫,但事实并非如此。我错过了什么吗?

4

3 回答 3

13

记住这一点:

如果您不将任何内容保存到会话中,则 session_end 将不会触发。如果您在第一个请求中将数据保存在会话中,并在同一请求中调用放弃,则 session_end 也不会触发。

希望这可以帮助!

顺便说一句: ASP.NET Session_End 事件未触发

于 2013-04-03T01:59:28.393 回答
10

耐心点。应该调用该事件,但不一定在超时后立即调用。

您可以从浏览器尝试:开始会话,等待 > 1 分钟,以某种方式进行回发

这应该有助于验证 Timeout 是否有效,我认为您也会看到 SessionEnd 发生在那个时候。否则,只需等待并开始其他一些会话。系统会在某个时候出现或调用它。

于 2010-03-03T17:04:20.943 回答
3

测试提示:使用Session.Abandon这样您就不必弄乱您的实际 web.config 值。只是不要Session.Abandon在同一个请求期间设置会话值和调用,否则它不会被存储。

于 2011-05-09T03:06:46.947 回答