0

$_SESSION変数を含むページがあります。一定の時間が経過すると、すべてのセッションが期限切れになりますが、これは十分公平です。しかし、問題は、$_SESSION 変数が期限切れになったため、未定義の通知を突然受け取ることです。

したがって、この状況では、セッションの有効期限が切れたときに行う最善の方法は何ですか? 通知を表示しないためにコードを含めるだけE ^ NOTICEですか (ページがエラーなしで完全に完了したことを確認した後)、またはページで使用してセッションを破棄することが期待されてsession_destroy()いますか、またはこれらの未定義のエラーを表示しない他の方法がありますか?ブラウザでこれらのページを表示しているユーザーに対して、セッションの有効期限が切れたときにページを表示する可能性があります。

以下は、 $_SESSION コードを表示する方法に関するコード例です。

 <?php

    ini_set('session.gc_maxlifetime',12*60*60); //12 hours until session expires
    ini_set('session.gc_divisor', '1');
    ini_set('session.gc_probability', '1');
    ini_set('session.cookie_lifetime', '0');
    require_once 'init.php'; 

    session_start();  //starts sessions

    include('member.php');  //this php script also contains sessions


    if (isset($_POST['id'])) {

    $_SESSION['id'] = $_POST['id'];

    }


    if(isset($_POST['sessionNum'])){
                //Declare my counter for the first time

                $_SESSION['initial_count'] = $_POST['sessionNum'];
                $_SESSION['sessionNum'] = intval($_POST['sessionNum']);
                $_SESSION['sessionCount'] = 1;

        }

    if (isset($_POST['submitDetails']) && $_SESSION['sessionCount'] < $_SESSION['sessionNum']) {
        $_SESSION['sessionCount']++;
    }


    $sessionMinus =  $_SESSION['sessionCount'];


    if (isset($_POST['textQuestion'])) {

    $_SESSION['textQuestion'] = $_POST['textQuestion'];

    }

    if (isset($_POST['textMarks'])) {

    $_SESSION['textMarks'] = $_POST['textMarks'];

    }

    if (isset($_POST['totalWeight'])) {

    $_SESSION['totalWeight'] = $_POST['totalWeight'];

    }

    if ($sessionMinus == $_SESSION['initial_count']){ 

        $action = 'individualmarks.php'; 

    }elseif($sessionMinus != $_SESSION['initial_count']){ 

        $action = $_SERVER['PHP_SELF']; 

    }

    ?>
4

3 に答える 3

3

isset()$_POST 変数で行うように関数で確認すると、通知が消えます

于 2013-01-11T15:03:37.773 に答える
1

特定の番兵値の存在を確認します。たとえば、セッションで行っていることがログイン保護されたシステムに対するものである場合は、の値を確認してください isset($_SESSION['loggedIn']) && ($_SESSION['loggedIn'] == true)

番兵の値が存在しない場合は、セッションに何かが発生しているため、ユーザーを別の場所にリダイレクトして、元の状態に復元する必要があります(ログインページを表示するなど)。

「遅い」ユーザーがどのページにアクセスするかを事前に知ることはできないため、セッションはいつでも消滅する可能性があると想定し、すべてのページでセンチネルチェックを実行する必要があります。

于 2013-01-11T15:05:32.720 に答える
1

まず、ライブサイトでは、error_reporting(0)が必要になるため、通知は表示されません。

通知を表示したくない場合は、配列キーも確認する必要があります。そして、あなたはを使用してチェックしますif(isset($_SESSION['some_key']))

これを行うと、その変数を安全に使用できます。

于 2013-01-11T15:06:47.750 に答える