0

以下に、セッション変数が12時間続く可能性のあるコードを示します。

ini_set('session.gc_maxlifetime',12*60*60);
ini_set('session.gc_divisor', '1');
ini_set('session.gc_probability', '1');
ini_set('session.cookie_lifetime', '0');

しかし、私の質問は、12時間経過してセッション変数の有効期限が切れると、ユーザーをログアウトできるということです。言い換えると、teacherlogout.phpページがありますが、12時間経過した後、ユーザーが別のページに移動したり、12時間後にページを更新したりすると、ユーザーをログアウトページにリダイレクトできますか?

アップデート:

これはうまくいくでしょうか:

if ((isset($username)) && (isset($userid))){

...//WHOLE CODE

}else{

header( 'Location: teacherlogout.php' ) ;
}
4

2 に答える 2

0

クライアントにポーリングを実装します。擬似コード:

PHP

// hasSession.php
echo (isset($_SESSION['user_id'])); // bool

JavaScript

// Poll server
function checkSession() {

    // Assuming the function passes along the truthy or falsy response
    if (ajaxCallToHasSessionPHPResponse()) {
        setTimeout(checkSession, 10000); // Check again in 10 seconds
    } else {
        window.location = '/logout.php';
    }
}
checkSession();
于 2012-09-26T17:37:42.477 に答える
0

レジスタグローバルがtrueに設定されている場合や、未定義の変数が厳密さのレベルによって無視されている場合は、検出が非常に難しい穴にコードが開いたままになる可能性があるため、変数の状態を確認することはお勧めしません。

この質問に対する受け入れられた答えPHPセッションが空であるかどうかを確認するにはどうすればよいですか?

訪問者の状態を確認するための最も一般的な方法です。ただし、この種のシステムを構造化して効率的にするための専用のライブラリがあります。

これを読んでください:http ://www.phpeveryday.com/articles/Zend-Framework-Login-Creating-Authentication-P566.html

これは、Zendライブラリを使用して、現在の訪問者がIDを持っているかどうかを判断する方法です。この場合、ユーザー名に対してセッションIDでログインしているユーザーです。これを容易にするためにライブラリを使用しない場合でも、同じ概念を使用して、訪問者のIDをチェックする独自の方法を開発できます。

于 2012-09-26T17:48:29.780 に答える