【问题标题】:why my session didn't get expired?为什么我的会话没有过期?
【发布时间】: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


【解决方案1】:

这里有很多可能的事情。配置中设置的超时时间为“1”分钟,因此您的会话变量必然会超时。

您面临的情况(我 90% 肯定)是缓存的情况。您的索引页面默认控制器操作必须是 HTTP 获取。在您的页面内放置一个按钮,然后尝试使用按钮刷新您的网页。该按钮将发布到服务器。我确信会话变量不会持续存在。

更新 2

请查看以下链接以查看how to turn on the Sql Agent。请打开它,让我们知道它是否有效

【讨论】:

  • 它不是缓存。我想我知道问题是什么,但不知道如何解决它。我正在编辑我的帖子,请你看一下。
【解决方案2】:

闻起来像缓存问题。你用的是哪个浏览器?

您在浏览器中使用的会话是为所有控制器初始化的“访客”会话(当然,无会话除外)。即使它过期了,也会创建一个新的,并且应该将时间戳放在里面。因此,每次刷新页面时,您都应该看到当前时间。

编辑:(帖子更新后)。

如果认为它完全正确。根据this需要设置sessionState的regenerateExpiredSessionId字段,重新生成过期的会话ID。否则,现有的会话对象只会被重新更新和重新使用。

编辑 2:

如果 cookieless 为真,则之前的编辑将是有效的。在您的代码中,您提到 cookieless 是错误的,但由于某种原因,它仍然充当 cookieless = true。你确定你在sessionState中有正确的参数吗?

【讨论】:

  • 它不是缓存。我想我知道问题是什么,但不知道如何解决它。我正在编辑我的帖子,请你看一下。
  • 经过几个小时的谷歌搜索,我相信我找到了为什么它不起作用。再次更新我的帖子。
猜你喜欢
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多