2013-04-20 157 views
0

我遇到了一个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的服务器上整数运算的问题,但我怀疑它,因为一个简单的测试脚本,我做算术和回声效果的作品。这指出了将结果存储在会话数组中的某种问题。

这是推动我拐弯,我相信,有一些明显的是,我没有在这里看到。任何帮助将非常感激。

+0

你可以在每个代码的最后一个print_r($ _ SESSION)? – 2013-04-20 05:33:06

+0

我做了一些更多的测试,发现了一些相当奇怪的东西。如果我不对$ tout执行任何算术运算 - 或者执行$ tout + 0,我认为它被PHP解释器滤除为无用 - 会话变量是完整的。任何其他$ tout + N后跟trigger_error(json_encode($ _ SESSION))会显示完整的会话数组,但随后会让会话数据被写入,然后尝试在稍后的另一个脚本中提取会话数据返回空会话数组。 – DroidOS 2013-04-20 05:42:24

回答

0

我用dechex(为$ tout + NNN)解决了这个问题。在进一步的测试中,我发现这个问题只在我的32位WAMP isntallation上出现。在我的64位CentOS服务器上没有问题。

我现在也想通了什么错误。 PHP的默认会话存储序列化$ _SESSIONS变量。 'tout'元素被当作整数,32位,然后反序列化失败。

进一步的说明 - 直到地步会话关闭和被序列化会话阵列显示了正确的内容,因为PHP默默地将值转换为双。

0

试试这个..

<?php 
    session_start(); 
    $_SESSION['tout'] = time(); 

    $_SESSION['dna'] = md5($_SERVER['HTTP_USER_AGENT']); 

    if (1 == $user->demo) 
    { 
    $_SESSION['demo'] = $user->demo; 
    $_SESSION['tout'] = $_SESSION['tout'] + 10 * 60 // for example 10 minutes 
    } 
    else 
    $_SESSION['tout'] = $_SESSION['tout'] + 20 * 60 // for example 20 minutes 
?> 
+0

我尝试了各种各样的变化 - 甚至是非理性的变化。正如我在上一条评论中提到的,问题似乎不在于将值分配给SESSION数组,而是在会话写入后从其他脚本中稍后恢复 - 此时整个数组将返回为空。 – DroidOS 2013-04-20 05:52:40

0

如果你这样做,会发生什么:

session_start(); 
$_SESSION['dna'] = md5($_SERVER['HTTP_USER_AGENT']); 
if (1 == $user->demo) 
{ 
$_SESSION['demo'] = $user->demo; 
$tout = time()+900; 
} else $tout = time()+7200; 
$_SESSION['tout'] = $tout; 
+0

Wolfram:它只会从当前时间增加,而不是从用户会话时间增加。 – Ranjith 2013-04-20 05:51:36