asp.net - 为什么 Asp.Net 中的 Session 对象在超时后没有被删除?

标签 asp.net session session-state asp.net-4.0

为什么 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/

相关文章:

c# - Asp.net 逐页发送信息表单

asp.net - ASP.NET和 session -新浏览器实例与新浏览器窗口

php - StartSession中间件清除验证错误

php - Codeigniter 3.x session 是安全的,是否使用已弃用的购物车类?

javascript - 刷新后保持全局变量处于事件状态,javascript

Asp.Net如何将 session 状态传输到状态服务器

c# - 路径的 Controller ...未找到或未实现 IController

c# - 使用 Windows 身份验证禁用对 ASP.NET 应用程序子文件夹的身份验证

c# - 如何将 url 处的 xml 文件的内容加载到字符串中?

php - WordPress session 在 Mozilla Firefox 中丢失