我遇到了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数组。
简单地说,我要做的是跟踪用户会话在与服务器的每次后续交互中所说明的时间,确定是否应将会话标记为超时并且相应地通知用户。演示模式下的超时时间应为900秒,否则为7200秒。
也许在我的32位本地WAMP服务器上存在整数运算的问题,虽然我怀疑它是一个简单的测试脚本,我在那里进行算术并回显结果。这指出了将结果存储在会话数组中的某种问题。
这让我绕过弯道,我确信有一些显而易见的东西,我没有在这里看到。任何帮助将不胜感激。
答案 0 :(得分: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
?>
答案 1 :(得分: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;
答案 2 :(得分:0)
我通过使用dechex($ tout + NNN)来解决这个问题。进一步测试我发现这个问题只出现在我的32位WAMP isntallation上。在我的64位CentOS服务器上没有问题。
我现在也知道出了什么问题。 PHP的默认会话存储序列化$ _SESSIONS变量。 'tout'元素被视为一个整数,32位,然后反序列化失败。
进一步说明 - 在会话关闭并被序列化之前,SESSIONS数组会显示正确的内容,因为PHP会默默地将值转换为double。