我创建了一个空的 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();
在我的关于页面中,我将其写在视图中。
@Session["currentTime"]
第一次,我打开关于页面,当前时间显示。我将页面单独放置 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 代理没有运行。但不知道如何打开它。如果您有任何想法,请告诉我。