我正在使用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);
Run Code Online (Sandbox Code Playgroud)
然后在身体......
<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>
Run Code Online (Sandbox Code Playgroud)
最后一个活动变量是从一个由会话变量填充的文本输入中提取的.这个位似乎有效,就像你点击续订按钮时输入的值改变了,控制台输出显示自上次活动重置以来的时间.
我希望这是有道理的.请求澄清,但我真的很难过这个!
谢谢!
你有两个t.
var t = 0;
Run Code Online (Sandbox Code Playgroud)
这个在外面的范围.
var t = setTimeout("logout();", 10000);
Run Code Online (Sandbox Code Playgroud)
这个在内部范围内.
clearTimeout(t);
Run Code Online (Sandbox Code Playgroud)
这是读取外部范围的那个.
var从内部范围中移除一个.
| 归档时间: |
|
| 查看次数: |
5537 次 |
| 最近记录: |