【发布时间】:2012-07-22 07:35:39
【问题描述】:
我创建了一个空的 mvc3 项目。
它有一个控制器(“home”)和 2 个动作(“index”、“about”)
我正在使用 sqlserver 来保存我的会话。
这是我的配置文件。
<sessionState mode="SQLServer" cookieless="false" timeout="1" sqlConnectionString="Data Source=localhost;Integrated Security=True;MultipleActiveResultSets=False">
超时时间为 1 分钟。
在索引页面中。我创建了一个会话
Session["currentTime"] = DateTime.Now.ToString();
在我的 about 页面中,我将其写在视图中。
@Session["currentTime"]
第一次打开about页面,显示当前时间。我将页面单独放置 5 分钟,然后返回刷新它。旧的 currentTime 仍然存在。我将超时设置为 1,所以它现在应该过期并且页面上应该什么也不显示。
也许我完全误解了会话的工作原理。请告诉我为什么会话值在过期后仍然存在。
编辑:
它不是缓存。我添加了以下代码来禁用缓存。还是有问题。
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
我想我发现了问题,不知道如何解决。
我从 Chrome 中清除了缓存。打开“/home/index”页面创建会话,然后进入“/home/about”页面。检查数据库。创建了一个会话。仔细检查“创建”和“过期”字段。确认一分钟后过期。
然后我离开电脑 5 分钟。在我回来刷新“/home/about”页面后。会话还在,没有过期。查询我的会话表,注意“过期”字段更改为 1 分钟 + 我刷新页面的时间。为什么过期字段变了?????????
第二次更新:
我相信这就是问题所在。 SQL 会话提供程序不会主动监控会话表中的 Expires 列。相反,会话在从表中删除之前不会“正式”过期,这是通过调用 DeleteExpiredSessions 存储过程的 SQL 代理作业完成的。默认情况下,作业配置为每 60 秒运行一次。
我很确定我的 sql 代理没有运行。但不知道如何打开它。如果您有任何想法,请告诉我。
【问题讨论】:
-
查看我的答案以检查如何打开 sql 代理
标签: asp.net asp.net-mvc asp.net-mvc-3 session session-state