在grails中会话到期后使用ajax显示登录表单

时间:2012-07-10 12:14:59

标签: grails

我有一个用户列表显示在会话在20分钟后过期的表中,但在到期后它没有进入登录页面而没有刷新,我想显示一个弹出窗口显示一个登录表单,登录后将保持我相同的URL。我正在研究 grails ;任何人都可以帮忙吗?

1 个答案:

答案 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();
            }});
    }