我遇到了一个PHP会话的bizare问题,这让我很吃惊。这是我在做什么的要点PHP会话变量错误?
$tout = time();
session_start();
$_SESSION['dna'] = md5($_SERVER['HTTP_USER_AGENT']);
if (1 == $user->demo)
$_SESSION['demo'] = $user->demo;
$_SESSION['tout'] = $tout;
这似乎工作得很好。但是,此变体
$tout = time();
session_start();
$_SESSION['dna'] = md5($_SERVER['HTTP_USER_AGENT']);
if (1 == $user->demo)
{
$_SESSION['demo'] = $user->demo;
$tout += 900;
} else
$tout += 7200;
$_SESSION['tout'] = $tout;
会抛出整个$ _SESSION数组。
简单地说,我所要做的就是保持在用户会话与服务器中的每个随后的互动表示建立会话是否应被标记为超时和相应的用户通知的轨道。演示模式下的超时时间应为900s,否则应为7200s。
也许有一个与我的32位本地WAMP的服务器上整数运算的问题,但我怀疑它,因为一个简单的测试脚本,我做算术和回声效果的作品。这指出了将结果存储在会话数组中的某种问题。
这是推动我拐弯,我相信,有一些明显的是,我没有在这里看到。任何帮助将非常感激。
你可以在每个代码的最后一个print_r($ _ SESSION)? – 2013-04-20 05:33:06
我做了一些更多的测试,发现了一些相当奇怪的东西。如果我不对$ tout执行任何算术运算 - 或者执行$ tout + 0,我认为它被PHP解释器滤除为无用 - 会话变量是完整的。任何其他$ tout + N后跟trigger_error(json_encode($ _ SESSION))会显示完整的会话数组,但随后会让会话数据被写入,然后尝试在稍后的另一个脚本中提取会话数据返回空会话数组。 – DroidOS 2013-04-20 05:42:24