这两个页面是较大的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>
答案 0 :(得分:0)
检查你的php.ini以检查会话保持活动的时间:
session.cookie_lifetime = 300
您可以使用以下命令在运行时设置:
session_set_cookie_params
http://php.net/manual/en/function.session-set-cookie-params.php