2

セッションの有効期限が切れたときにページにアラートを表示したい。スタックを検索して、JQueryを使用したMVCを見つけました:SessionExpireの処理

このすばらしいリンクは、セッションを維持する方法を説明しています。しかし、問題はそれがタイマーを使用することです。私の状況では、ユーザーがシステムをスリープモードのままにして、Webページを開いたままにしておくことができます。その場合、タイマーは動作を停止します。システムがスリープモードになってからウェイクアップした場合でも、セッションが期限切れになったことをコードが認識できるようにする方法を提案してください。

4

2 に答える 2

2

このようなものをすべてのブラウザーとすべてのプラットフォームで機能させる唯一の方法は、ポーリングを使用することです。ajax 呼び出しを頻繁に行う javascript setInterval を使用できます。間隔をサーバーのタイムアウトよりも短い時間に設定すると、セッションが更新され、有効期限が切れることはありません。サーバーのタイムアウト時間より上に設定すると、実際に有効期限が切れたかどうかがわかり、クライアントに有効期限が切れたことを伝えます。

于 2012-05-22T13:18:30.563 に答える
0

セッション終了情報を設定するために、php からブラウザーにセッション Cookie を保存することは非常に一般的です。サーバー側では、有効期限情報がデータベースに保存されます。ユーザー要求ごとに、サーバーは Cookie とデータベースを更新します。jquery cookie プラグインを使用すると、セッションの有効期限がいつ切れるかを確認できます。他の人がセッションの有効期限が切れる時間にタイマーイベントを設定することを提案しているように、ポーリング(プーリングではない)でそれを行うことができます。

編集

私が取り組んでいる同様のアプリケーションがあります。これが私がやったことです:すべてのajaxリクエストのphpで私はクッキーを設定しました

$exp_gmt = gmdate("D, d M Y H:i:s", time() + $this->allowcache_expire * 60)." GMT";
header("Expires: ".$exp_gmt);
header("Cache-Control: max-age=".$this->allowcache_expire * 60, false);

次に、クライアント側でこのjqueryプラグインを使用します(どこで見つけたか思い出せません)

jQuery.cookie = function(d, e, b) {
    if(arguments.length > 1 && String(e) !== "[object Object]") {
        b = jQuery.extend({}, b);
        if(e === null || e === undefined) {
            b.expires = -1
        }
        if( typeof b.expires === "number") {
            var g = b.expires, c = b.expires = new Date();
            c.setSeconds(c.getSeconds() + g)
        }
        e = String(e);
        return (document.cookie = [encodeURIComponent(d), "=", b.raw ? e : encodeURIComponent(e), b.expires ? "; expires=" + b.expires.toUTCString() : "", b.path ? "; path=" + b.path : "", b.domain ? "; domain=" + b.domain : "", b.secure ? "; secure" : ""].join(""))
    }
    b = e || {};
    var a, f = b.raw ? function(h) {
        return h
    } : decodeURIComponent;
    return ( a = new RegExp("(?:^|; )" + encodeURIComponent(d) + "=([^;]*)").exec(document.cookie)) ? f(a[1]) : null
}; 

また、ページに時計があります:

showTime : function() {
    var today = new Date();
    var curr_date = today.getDate();
    var curr_month = today.getMonth() + 1;
    var curr_year = today.getFullYear();
    var curr_hour = today.getHours();
    var curr_min = today.getMinutes();
    var curr_sec = today.getSeconds();
    if(curr_date < 10)
        curr_date = '0' + curr_date;
    if(curr_month < 10)
        curr_month = '0' + curr_month;
    if(curr_hour < 10)
        curr_hour = '0' + curr_hour;
    if(curr_min < 10)
        curr_min = '0' + curr_min;
    if(curr_sec < 10)
        curr_sec = '0' + curr_sec;
    var curr_full = curr_date + "/" + curr_month + "/" + curr_year + "<br />" + curr_hour + ":" + curr_min + ' <span style="font-size:0.8em">' + curr_sec + '</span>';
    $('#clock').html(curr_full);
    setTimeout("showTime()", 1000);
}

時計関数の最後に、Cookie を読み取り、現在の時刻と比較して有効期限が切れているかどうかを確認できます。

于 2012-05-22T13:24:09.073 に答える