当会话在我们仍然查看页面时到期时,我们应该怎么做?

时间:2013-01-11 15:01:05

标签: php

我有一个包含$_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']; 

    }

    ?>

3 个答案:

答案 0 :(得分:3)

你用isset()函数检查你的$ _POST vars,并且通知会消失

答案 1 :(得分:1)

检查是否存在特定的标记值。例如如果你在会话中做的任何事情是针对受登录保护的系统,那么检查值 isset($_SESSION['loggedIn']) && ($_SESSION['loggedIn'] == true)

如果不存在标记值,那么会话就会发生某些事情,您应该将用户重定向到其他地方以便按照应有的方式恢复(例如显示登录页面)。

由于您无法事先知道“慢”用户会点击什么页面,您必须假设会话可以随时消失,并在每个页面上进行哨兵检查。

答案 2 :(得分:1)

首先,在实际网站中,您需要使用error_reporting(0),因此您将看不到通知。

如果您不想再看到通知,则还需要检查数组键。然后使用if(isset($_SESSION['some_key']))

进行检查

执行此操作后,您可以安全地使用该变量。