我有一个用户列表显示在会话在20分钟后过期的表中,但在到期后它没有进入登录页面而没有刷新,我想显示一个弹出窗口显示一个登录表单,登录后将保持我相同的URL。我正在研究 grails ;任何人都可以帮忙吗?
答案 0 :(得分:0)
我自己做了,这是它的“gracefulSession.js”的js代码,并在你要嵌入你的HTML代码的页面上调用这个javascript。
function checkSessionStatus(){
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();
}
}
}
function setlatestPoleTIme(){
//alert("SETTING POLE TIME");
var lStorage = getLocalStorage();
if(lStorage){
lStorage.setItem('poleTime',new Date());
}
}
function 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();
}
}
function logout(){
//alert("LOGGIN OUT")
var lStorage = getLocalStorage();
if(lStorage){
lStorage.setItem('isLoggedOut','true');
}
}
function resetLoggedOutFLag(){
var lStorage = getLocalStorage();
if(lStorage){
lStorage.removeItem('isLoggedOut');
}
}
function 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代码保留在嵌入脚本标记的顶部:
function poleSessionStatus(){
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();
}});
}