为什么 Session 对象在超时时间后没有被删除?
我使用的是 Asp.Net 4.0, session 状态配置如下。
<sessionState mode="SQLServer" cookieless="false" timeout="5"
allowCustomSqlDatabase="true"
sqlConnectionString="data source=.\SqlExpress;initial catalog=App_SessionState;user id=sa;password=xxxxxxxx"/>
如果我在浏览器中大约 10 分钟没有事件,是否应该删除 Session 对象。但 10 分钟后我仍然可以访问 Session 变量。我在这里遗漏了什么吗?
编辑:
如果我在 10 分钟后访问 session 变量(如下所示),我不应该得到 NULL
var myObj = Session["MyKey"] as MyClass;
10 分钟后 mObj 不为 NULL。
最佳答案
安装了一个名为 DeleteExpiredSessions
的存储过程,从工作中打电话 ASPState_Job_DeleteExpiredSessions
,并且每分钟执行一次(如果我正确读取InstallSqlState.sql文件)。
该过程基本上调用DELETE FROM ASPStateTempSessions WHERE Expires < GETUTCDATE()
因此,如果对象未删除,请检查“过期”列,并验证您是否与 UTC 日期进行比较。如有疑问,请执行 SELECT * FROM ASPStateTempSessions WHERE Expires < GETUTCDATE()
。另外,请确保您的 ASPState_Job_DeleteExpiresSessions
已启用并正在运行。
一个快速的(且完全未经证实的想法); SQL Server Express 是否附带 SQL 代理?它是否已启用并能够执行计划的作业?
关于asp.net - 为什么 Asp.Net 中的 Session 对象在超时后没有被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935594/