【问题标题】:Iframe keep-alive function - what is needed to reset the session timeout?iframe 保持活动功能 - 重置会话超时需要什么?
【发布时间】:2010-11-19 05:54:09
【问题描述】:

我有一个隐藏的 iframe,它不时刷新,以便在用户在线时保持 ASP.NET 会话正常运行。

但是,我收到了有关用户遇到会话超时的报告,所以现在我怀疑需要什么来重置会话计时器。

隐藏的 iframe 的内容页面(简单的 html 页面)会以一定的时间间隔自行刷新,明显小于会话超时时间。

我的问题是:即使服务器以 HTTP/1.x 304 Not Modified 响应,是否足以让页面自行刷新(重置会话计时器)?

只是 GET 请求本身告诉网络服务器重置会话计时器吗?

或者我是否需要确保实际获取页面并收到 HTTP/1.x 200 OK 响应?

【问题讨论】:

  • Sebastian:你是说一个请求,它的响应是一个缓存的(304),不会刷新 ASP.NET 会话计时器?答案是肯定的,它不会刷新 ASP.NET 会话计时器。请参阅我的更新答案。

标签: asp.net session-timeout


【解决方案1】:

要使会话保持活动状态,您所要做的就是从当前会话向页面发送请求。您可以通过 iframe 或通过 ajax 来执行此操作。

如果您只是在 IFrame 中刷新页面,则响应可能是缓存的 - 因此是 304。您必须每次发送一个新请求 -

var url = "http://domain.com/defibrillator.aspx?" + (new Date()).getTime();

例如

http://domain.com/defibrillator.aspx?1556467987987
http://domain.com/defibrillator.aspx?5448796497878
http://domain.com/defibrillator.aspx?4123165487987
....

编辑 1

或者您可以使用Refresh HTTP header attribute


编辑 1.1

如果您使用的是上面提到的 codeproject 文章,请尝试使用 AJAX 而不是 iframe 对其进行建模 - 它会为您节省几个字节的额外 iframe 标记。


编辑 2 - 关于HTTP 304 Not Modified

如果客户端执行了 有条件的 GET 请求和访问是 允许,但该文件尚未 修改后,服务器应该响应 使用此状态码。 304 响应不得包含 消息体,因此总是 由第一个空行终止 在标题字段之后。

这意味着请求尚未到达 ASP.NET 管道,而是直接由 IIS 本身提供服务。 ASP.NET 环境不知道已发出请求。因此,它不会执行会话更新。

【讨论】:

  • 我是否正确阅读了您的答案?:您是说一个请求,其响应是一个缓存的响应(304),不会刷新 ASP.NET 会话计时器?这正是我的问题的核心,所以请原谅我如此明确。
  • 太棒了。这就解释了为什么在这个特定的项目中,用户会遇到超时——我参与过的其他项目有不同的缓存方法,通常是“没有缓存”。非常感谢。
猜你喜欢
  • 2014-12-22
  • 1970-01-01
  • 2012-05-29
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2014-05-19
  • 2012-09-22
相关资源
最近更新 更多