2

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

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

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

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

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

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

4

1 回答 1

6

要使会话保持活动状态,您所要做的就是从当前会话向页面发送请求。您可以通过 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 标头属性


编辑 1.1

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


编辑 2 - 关于未修改的 HTTP 304

如果客户端已经执行了一个条件 GET 请求并且允许访问,但是文档没有被修改,服务器应该用这个状态码来响应。304 响应不能包含消息体,因此总是由头字段之后的第一个空行终止。

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

于 2009-08-13T09:33:27.177 回答