ASP.NET SessionState TimeOut无法正常工作

时间:2011-11-13 10:34:13

标签: c# asp.net session-state session-timeout

我希望在发生SessionState超时时关闭我的网页。这是我的网络配置中的代码:

<system.web>
<sessionState timeout="1" mode="InProc"/>
</system.web>

我设置为1分钟用于测试目的。以下是我的Global.asax代码:

protected void Session_End(object sender, EventArgs e)
{
    Response.Redirect("~/LogOut.aspx");
}

我在其中一个页面上放了一个标签,以便检查会话超时,这是Page_Load事件中的代码:

lblSession.Text = "SESSION TIME: " + Session.Timeout.ToString();

当我进入网站并进入此页面时,标签显示SESSION TIME:1,但是1分钟后我没有被重定向到LogOut页面,而且当前页面仍然完全活跃并正常工作,显然意味着会话尚未终止。 我在Visual Studio 2008中通过开发服务器工作,所以我看到有关IIS设置的建议在这个阶段似乎并不相关。 请帮忙!

3 个答案:

答案 0 :(得分:3)

HTTP是请求/响应协议。浏览器和服务器之间存在无持久连接Session_End中的代码因此无效 - 它无法告诉浏览器做任何事情。

您需要创建一个(客户端)JavaScript计时器,actively在会话超时之前加载注销页面。

答案 1 :(得分:1)

Session_End根据我的经验,在超时发生后第一次回发(可以通过客户端计时器实现)调用 - 无论何时可能......如果用户只是关闭浏览器此事件可能永远不会被调用(除非你在这种情况下做了一个特定的JS处理程序unload来进行回发)。

有关信息,请参阅:

答案 2 :(得分:0)

这似乎不是测试会话超时的正确方法。尝试在会话变量中加入一些东西。请勿在几分钟内触摸该页面,并尝试从Session中读回。如果你的会话还活着,你应该能够看到变量,否则......你就不会。

详细了解会话和问题排查会话...... http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET