iframe保持活动功能 - 重置会话超时需要什么?

Seb*_*eth 2 asp.net session-timeout

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

但是,我一直在收到用户遇到会话超时的报告,所以现在我对重置会话计时器需要什么感到怀疑.

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

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

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

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

Kir*_*tan 6

要使会话保持活动,您只需向当前会话中的页面发送请求即可.您可以通过iframe或通过ajax执行此操作.

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

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

例如

http://domain.com/defibrillator.aspx?1556467987987
http://domain.com/defibrillator.aspx?5448796497878
http://domain.com/defibrillator.aspx?4123165487987
....
Run Code Online (Sandbox Code Playgroud)

编辑1

或者您可以使用Refresh HTTP标头属性.


编辑1.1

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


编辑2 - 关于HTTP 304未修改

如果客户端已执行条件GET请求并允许访问,但文档尚未被修改,则服务器应该响应此状态代码.304响应必须不包含消息体,因此总是在头字段之后的第一个空行终止.

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