0

我有一个用户列表显示在一个表中,其会话在 20 分钟后过期,但过期后它不会在不刷新的情况下进入登录页面,我想显示一个弹出窗口以显示登录表单,登录后将让我继续相同的网址。我正在研究grails;有人可以帮忙吗?

4

1 回答 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 回答