【发布时间】:2012-02-27 09:14:05
【问题描述】:
我正在使用 setTimeout 和 clearTimeout 进行自动注销。应该非常简单,但明确的超时似乎并没有停止超时,并且无论如何都会调用该函数。我设置了会话变量填充文本输入,然后 javascript 读取并与现在的时间进行比较。如果差异大于或等于 20 秒,则覆盖 div 会显示提供更新会话的选项,否则它将在 10 秒内注销。检查最后一个活动的脚本每十秒自动运行一次。显然,一旦我让它工作,时间会更长 - 这些只是为了测试目的。
我在网上搜索过,但似乎找不到明显的解决方案,因为它并不复杂,而且看起来真的应该可以工作!
这是我的代码:
var t = 0;
function check_status(){
var time_now = Math.floor(new Date().getTime() / 1000);
var last_activity = document.getElementById("last_activity").value;
var since_last_activity = time_now-last_activity;
console.info(since_last_activity);
if(since_last_activity >= 20){
// show div
document.getElementById("logout_warning").style.height = document.documentElement.clientHeight+"px";
document.getElementById("logout_warning").style.display = 'block';
// start countdown
var t = setTimeout("logout();", 10000);
}
}
function logout(){
document.getElementById("logout_warning").style.display = 'none';
location.href="/user/logout";
}
function renew(){
clearTimeout(t);
var time_now = Math.floor(new Date().getTime() / 1000);
document.getElementById("last_activity").value = time_now;
document.getElementById("logout_warning").style.display = 'none';
}
setInterval('check_status()', 10000);
然后在体内...
<div id="logout_warning" style="display:none; width:100%; height:500px; top:0px; left:0px; position:absolute; background-image:url('/images/overlay.png'); z-index:100000;">
<div style="width:300px; position:relative; margin:200px auto; border:1px solid #000000; background-color:#FFFFFF; padding:10px; text-align:center;">
You're going to be logged out in 10 seconds! oh no!<br/><br/>
<button type="button" onclick="renew();">Click here</button> to renew your session
</div>
</div>
最后一个活动变量是从由会话变量填充的文本输入中提取的。这一点似乎有效,因为当您单击更新按钮时,输入的值发生了变化,并且控制台输出显示自上次活动以来的时间已被重置。
我希望这是有道理的。请要求澄清,但我真的很难过这个!
谢谢!
【问题讨论】:
-
不要将
evaluation 的字符串传递给setTimeout,传递函数。setTimeout(logout, 10000);
标签: javascript