我一直在为我的网页开发自动注销功能.作为其中的一部分,我在我的代码中的3个不同位置实现了window.location.reload(true).其中两个是自动的,一个连接到链接.链接总是有效,但自动链接并不总是有效,我不明白为什么.
对于自动注销,由debouncer设置:
var userActionTimeout = debounce(function(e) {
console.log("inaction timeout, reloading page");
window.location.reload(true);
},15000;);
$(document.body).on('mousemove keydown click scroll',userActionTimeout);
理论上应该在一定量的不活动后重新加载页面.
另外两种用途发生在某些类型的AJAX数据提交之后(例如,发送的公然错误的数据只有在客户端被修改时才会发生)触发注销.当然,服务器会忽略任何进一步的AJAX提交,服务器将为客户端提供的下一页是登录页面.如果这种情况无意中发生,AJAX会向客户端发送包含以下内容的错误消息:
<a href="#" onclick="window.location.reload(true);">refresh</a> to continue session
我还实现了一个超时,如果提供此链接也会发生这种情况,这是在收到AJAX响应后发生的:
if (typeof response._forceRefresh !== 'undefined' && response._forceRefresh) {
console.log('reload firing');
/*
some code to insert the link into a spotlight here
*/
setTimeout(function(){console.log('reloading in 3s...');},7000);
setTimeout(function(){
console.log('reloading...');
window.location.reload(true);
},10000);
}
但是我遇到的问题是这样的:大部分时间,debounce页面重新加载工作(在firefox和chrome中测试),但偶尔也没有.链接始终有效,但AJAX响应重新加载大约为50/50.我知道它会收到服务器的响应,因为链接显示,但通常它实际上并没有自动重新加载页面.
到底是怎么回事?
解决方法:
当我在网页上出现不一致时,通常会涉及我没有意识到的缓存.如果您还没有,请仔细查看您的项目并查看是否存在受影响的位置,您可以强制它不要缓存页面.
另一个想法可能是尝试使用元刷新元素.建议使用另一个线程:auto logout idle timeout using jquery php