jquery/javascript创建一个注销计时器
jquery/javascript creating a logout timer
我一直在尝试创建一个计时器,当我的客户端被idol超过10分钟时,该计时器会将其注销。我已经创建了下面的代码,只要用户不打开第二个选项卡,它就可以正常工作。我有很多客户端打开第二窗口或选项卡,当第二个标签打开时,计数器会加快速度。我正在寻找一种方法来改进以下代码,以便选项卡/窗口能够更好地同步。
var cookies='off'; // var to check if cookies are turned off
var alertTimes=0; // alturnative to cookies
$(function(){
resetCookies();
var loginTime=getCookie("loginTime");
if (loginTime!=null && loginTime!=""){ cookies='on'; }
checkAlerts();
});
function resetCookies(){
setCookie("loginTime",'10',1);
alertTimes=0;
}
function checkTime() {
if(cookies=='on'){
var loginTime=getCookie("loginTime");
if (loginTime!=null && loginTime!=""){
var newTime=loginTime-1;
if(newTime==0){ autoLogout(); return false;}
setCookie("loginTime",newTime,1);
}else{ autoLogout(); return false;}
}else{
alertTimes++;
if(alertTimes>=10){ autoLogout(); return false;}
}
setTimeout(checkTime, 600000);
}
function setCookie(c_name,value,exdays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name){
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++){
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^'s+|'s+$/g,"");
if (x==c_name){ return unescape(y); }
}
}
function autoLogout(){
window.location.href=("logout.php");
}
也许这个例子能满足您的需求?
( function ( $ ) {
$.loginTimeout = function ( options ) {
var opts = $.extend( {}, $.loginTimeout.defaults, options ),
callback = function() {
$.getJSON( opts.url, function ( data ) {
if(data.status === "signed_out")
document.location = opts.redirectTo;
});
};
setInterval( callback, opts.timeout * 1000 );
};
$.loginTimeout.defaults = {
timeout: 60,
redirectTo: "/login",
url: "/check_login"
};
} ( jQuery ) );
// ...
$.loginTimeout({
redirectTo: "/users/sign_in",
url: "/users/check_status"
});
还要记住,在这个示例中,服务器应用程序正在决定用户会话是否已过期
您给出的代码就快到了。我的代码也需要同样的东西。我在cookie中添加了信息(上次修改),并将其与当前时间进行比较。如果两者之间有足够的空间(在本例中为1秒),则修改cookie信息。即使打开了15个选项卡,这也能起作用
我检查了他们是否打开了cookie。
$(function(){
resetCookies();
setTimeout(checkTime, 1000);
});
function resetCookies(){
setCookie("loginTime",'10',1);
}
function checkTime() {
var arrloginTime=getCookie("loginTime").split("--");
var loginTime=arrloginTime[0];
var dtmLastMod=new Date(arrloginTime[1]);
console.log(loginTime);
if (loginTime!=null && loginTime!=""){
var dtmNow = new Date();
if ((dtmNow.getTime() - dtmLastMod.getTime()) >= 1000){
var newTime=loginTime-1;
if(newTime==0){ autoLogout(); return false;}
setCookie("loginTime",newTime,1);
}
}else{ autoLogout(); return false;}
setTimeout(checkTime, 1000);
}
function setCookie(c_name,value,exdays){
var exdate=new Date();
var dtmLastMod = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + "--" + dtmLastMod + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name){
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++){
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^'s+|'s+$/g,"");
if (x==c_name){ return unescape(y); }
}
}
function autoLogout(){
console.log('You have been logged out of this document due to inactivity.');
}
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- 当用户从另一个选项卡注销谷歌时,如何执行一些javascript
- 当用户在php中的一个打开的选项卡中注销时,会自动注销所有打开的选项卡
- 如果在一个页面mvc上登录,则从所有页面注销用户
- 如何关闭浏览器中与特定域相关的所有打开的选项卡,同时使用angular js从其中任何一个选项卡注销
- jquery/javascript创建一个注销计时器
- 用户关闭一个选项卡(意味着注销)的许多选项卡,这些都没有重定向到索引