会话变量仅在经过一段时间后丢失

时间:2014-03-13 18:21:33

标签: php arrays session-variables

这两个页​​面是较大的PHP应用程序中页面的精简版本。 page1 调用一个函数(在应用程序中, f 执行SQL),它返回一个双元素数组,一个字符串和一个数组。然后,它将返回变量的数组部分放入会话变量,并显示指向 page2 的链接。 page2 将会话变量分配给局部变量。但是......

如果立即点击链接,一切都很顺利。如果在单击之前超过大约5-10分钟(变化),则第二页无法找到会话变量并抛出“未定义索引”错误。

这对我来说是违反直觉的,但也许不是那些更熟悉PHP的人。我已经尝试禁用垃圾收集,但结果是一样的。谁能解释为什么会话变量会丢失?

page1.php中

<?php
    session_start();
    function f() {
        $rtnValue = array ( 'error' => null, 'table' => array() );
        $rtnValue['error'] = '';
        $rtnValue['table'] = array('a','b','c');
        return $rtnValue;
    }
    $result = f();
    $dataTable = $result['table'];
    $_SESSION['termTable'] = $dataTable;
?>
<html>
    <body>
        <a href="page2.php">Go to page2.php</a>
    </body>
</html>

使page2.php

<?php
    session_start();
    function customError($errno, $errstr, $errfile, $errline) {
        echo "ERROR ", $errno, ": ", $errstr, " in ", $errfile, " at line ", $errline;
        exit();
    }
    error_reporting(E_ALL);
    set_error_handler('customError');
    $dataTable2 = $_SESSION['termTable'];
    // Undefined index: termTable in D:\www\hr\_DEV\PHP\sessionError\page2.php at line 9
?>
<html>
    <body>
        Okay
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

检查你的php.ini以检查会话保持活动的时间:

session.cookie_lifetime = 300

您可以使用以下命令在运行时设置:

session_set_cookie_params

http://php.net/manual/en/function.session-set-cookie-params.php