我有一个用户列表显示在一个表中,其会话在 20 分钟后过期,但过期后它不会在不刷新的情况下进入登录页面,我想显示一个弹出窗口以显示登录表单,登录后将让我继续相同的网址。我正在研究grails;有人可以帮忙吗?
问问题
892 次
1 回答
0
我自己做了,这是它的 js 代码“gracefulSession.js”,并在你要嵌入 html 代码的页面上调用这个 javascript。
函数检查会话状态(){
var lStorage = getLocalStorage();
if(lStorage){
//lStorage.setItem('poleTime',new Date());
var poleTime = lStorage.getItem("poleTime");
var parsedTime;
try{
parsedTime = new Date(poleTime);
}catch(e){
}
//alert(new Date()-parsedTime)
//alert(new Date())
//alert(parsedTime)
//3900000 = 1H5M
if(parsedTime && (new Date()-parsedTime)<3900000){
//alert('NCATCH'+parsedTime);
}else{
//alert('POINT');
poleSessionStatus();
}
}
}
函数 setlatestPoleTIme(){
//alert("SETTING POLE TIME");
var lStorage = getLocalStorage();
if(lStorage){
lStorage.setItem('poleTime',new Date());
}
}
函数 setCheckSessionTimer(){
var lStorage = getLocalStorage();
var isLoggedOut = false;
if(lStorage){
if(lStorage.getItem('isLoggedOut')=='true'){
isLoggedOut = true;
}
}
//console.log('checkingIfLoggedOut');
if(!isLoggedOut){
setTimeout ( "setCheckSessionTimer();", 5000);
//console.log("NOPT LO");
$('#LoggedoutMessage').hide();
checkSessionStatus();
}else{
setTimeout ( "setCheckSessionTimer();", 5000);
//console.log("KO");
//alert("You're Logged Out from other tab");
$('#LoggedoutMessage').show();
}
}
函数注销(){
//alert("LOGGIN OUT")
var lStorage = getLocalStorage();
if(lStorage){
lStorage.setItem('isLoggedOut','true');
}
}
函数resetLoggedOutFLag(){
var lStorage = getLocalStorage();
if(lStorage){
lStorage.removeItem('isLoggedOut');
}
}
函数 getLocalStorage(){
var storage,fail, uid;
try {
uid = new Date;
(storage = window.localStorage).setItem(uid, uid);
fail = storage.getItem(uid) != uid;
storage.removeItem(uid);
fail && (storage = false);
} catch(e) {}
return storage
}
现在,要嵌入的 HTML 代码,
<div id="LoggedoutMessage" style="display:none;position:absolute;background:black;height: 200%;width:100%;top: 0;z-index: 10000;opacity: 0.9;">
<div id="login_box" style="position:fixed;left:38%;top:30%; padding:10px; width: 365px;margin: 0 auto;border: 0px solid #CCC;margin-top: 35px;height: 150px;background: white; border-radius:3px;">
<div id="login_title">
<h1>You have been logged out.</h1>
</div>
<div id="reLogin">
<p>Please login to continue.</p>
<g:link controller="dashBoard" action="index" target="_blank" onclick="logout();">Login</g:link>
</div>
</div>
</div>
最后,在您保留 html 的位置,将此 javascript 代码保留在嵌入脚本标记的顶部:
功能极会话状态(){
jQuery.ajax({
type:'POST',
data:'',
url:'<g:createLink action="ajaxCheckSession" controller="dashBoard"/>',
success:function(data,textStatus){
//setTimeout ( "checkSession();", 5000);
},
error:function(XMLHttpRequest,textStatus,errorThrown){
$('#LoggedoutMessage').show();
},
complete:function(XMLHttpRequest,textStatus){
$.unblockUI();
}});
}
于 2012-07-27T05:13:28.243 回答