我希望在发生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设置的建议在这个阶段似乎并不相关。 请帮忙!
答案 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