为什么在Asp.Net中超时后不会删除Session对象?

Ami*_*abh 3 asp.net session session-state asp.net-4.0

在超时期限之后为什么不删除会话对象?

我使用的是Asp.Net 4.0,会话状态的配置如下所示.

<sessionState mode="SQLServer" cookieless="false" timeout="5"
                  allowCustomSqlDatabase="true" 
                  sqlConnectionString="data source=.\SqlExpress;initial catalog=App_SessionState;user id=sa;password=xxxxxxxx"/>
Run Code Online (Sandbox Code Playgroud)

如果我在浏览器中没有活动大约10分钟,则不应删除Session对象.但是10分钟后我仍然可以访问Session变量.我在这里错过了什么吗?

编辑:

如果我在10分钟后访问一个会话变量,如下所示,我不应该得到NULL

  var myObj = Session["MyKey"] as MyClass;
Run Code Online (Sandbox Code Playgroud)

10分钟后mObj不为NULL.

sis*_*sve 6

安装了一个调用的存储过程DeleteExpiredSessions,从作业调用ASPState_Job_DeleteExpiredSessions,并且每分钟执行一次(如果我正确读取了InstallSqlState.sql文件).

程序基本上要求 DELETE FROM ASPStateTempSessions WHERE Expires < GETUTCDATE()

因此,如果未删除对象,请检查Expires列,并验证您是否与utc日期进行比较.如果有疑问,请做一个SELECT * FROM ASPStateTempSessions WHERE Expires < GETUTCDATE().此外,请确保您ASPState_Job_DeleteExpiresSessions已启用并正常工作.

一个快速(完全未经证实的想法); SQL Server Express附带SQL Agent吗?它是否已启用并能够执行预定作业?