2

ユーザーに「ログアウトしました 再ログインしてください!」というメッセージを表示したい セッションがタイムアウトすると、毎回ajax リクエストが送信されます。セッションタイマーが終了したら、上記のメッセージを表示する最終的な ajax リクエストを送信したいと思います。しかし、ここでの問題は、ajax と jquery のコードをどこに保持する必要があるのか​​ わからないことです。簡単に言えば、私の要件は、Facebook がセッション タイムアウトで表示するもの、または複数のタブの場合はいずれかのタブがログアウトされたときに表示されるもののようなものです。私はgrailsプロジェクトに取り組んでいます。

4

2 に答える 2

4

このようにあなたのajaxリクエストをしてください

$.ajax({
    url:url,
    type:"POST",  // or get
    data:parameters,
    success: function(data) {
    // do procedure if success
          }
    error : function(xhr, type, error){
    // do procedure if fail
            // may be send a message to the server side to display a message that     shows session timeout
       }
});

エラー関数でセッション タイムアウトを処理する

于 2012-07-23T08:23:01.613 に答える
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();
        }
    });
}
于 2012-07-27T05:26:38.047 に答える