我在设置会话超时的 Asp.net 应用程序中遇到问题,经过一段时间后,会话仍未过期。这个应用程序有一个 SQL Server 2008 后端数据库,我在其中存储了这个应用程序的会话超时值。我目前将其设置为 3 分钟以进行测试。在 Global.asax 中,在 Session_Start 我有以下内容:
// Set the timeout
int timeout = GetSessionLength();
this.Session.Timeout = timeout;
并且GetSessionLength()
是一个在查询数据库会话超时后返回整数值的函数。
然后,在站点的母版页中,在 Page_Load 上,我有以下内容:
System.Web.UI.HtmlControls.HtmlMeta hmRefresh = new System.Web.UI.HtmlControls.HtmlMeta();
hmRefresh.HttpEquiv = "Refresh";
hmRefresh.Content = (this.Session.Timeout * 60).ToString();
Page.Header.Controls.Add(hmRefresh);
一旦超时,这会导致页面自行刷新。我的页面使用它成功地刷新了自己。但是,我还有一些其他代码在会话过期时会被命中,但它永远不会被命中,因为它表明会话从未过期。
此外,我一直在我的计算机上开发一个不同的应用程序,我在该应用程序中使用相同的代码来检测会话超时,它非常适合该应用程序。所以我不确定为什么它不适合这个。