我有一个隐藏的iframe,只要用户在线,就会不时刷新,以保持ASP.NET会话的正常运行。
但是,我一直在收到有关用户遇到会话超时的报告,所以现在我对重置会话计时器需要什么感到怀疑。
隐藏的iframe的内容页面(简单的html页面)会以一定的时间间隔自行刷新,这显着小于会话超时。
我的问题是:即使服务器使用HTTP / 1.x 304 Not Modified进行响应,是否足够(让会话计时器重置)让页面自行刷新?
只是GET请求本身告诉网络服务器重置会话计时器吗?
或者我是否需要确保实际获取页面并接收HTTP / 1.x 200 OK响应?
答案 0 :(得分:6)
要使会话保持活动,您只需向当前会话中的页面发送请求即可。您可以通过iframe或通过ajax执行此操作。
如果您只是刷新IFrame中的页面,则响应可能是缓存的 - 因此304.您必须每次都发送一个新请求 -
var url = "http://domain.com/defibrillator.aspx?" + (new Date()).getTime();
E.g。
http://domain.com/defibrillator.aspx?1556467987987
http://domain.com/defibrillator.aspx?5448796497878
http://domain.com/defibrillator.aspx?4123165487987
....
或者您可以使用Refresh HTTP header attribute。
如果您正在使用上面提到的codeproject文章,那么尝试使用AJAX而不是iframe对其进行建模 - 它会为您节省几个字节的额外iframe标记。
如果客户已经执行了 条件GET请求和访问是 允许,但文件还没有 修改后,服务器应该响应 使用此状态代码。 304 响应不得包含 消息体,因而永远 由第一个空行终止 在标题字段之后。
这意味着请求尚未到达ASP.NET管道,并且直接由IIS本身提供服务。 ASP.NET环境不知道已发出请求。因此,它不会执行会话续订。