【发布时间】:2014-04-06 01:13:47
【问题描述】:
我今天在测试一些东西时遇到了一些奇怪的会话行为。首先,我的任务是为 WordPress 网站创建注册功能。过去我在 WordPress 上做过大量的工作,但我从来没有做过任何涉及任何服务器端脚本语言的事情。
我正在测试我的工作环境,这包括确保我能够连接到 MySQL、确保会话正常工作,并且基本上只是让自己熟悉设置。
在测试会话时,我做了以下事情:
<?php
$timer = time();
$_SESSION[$timer] = $timer;
print_r($_SESSION);
?>
我期待在第一次加载页面时会看到这样的内容:
Array
(
[1396745563] => 1396745563
)
...这正是发生的事情。在第二次刷新时,我想看看:
Array
(
[1396745563] => 1396745563
[1396745570] => 1396745570
)
...但是相反,我看到了:
Array
(
[1396745570] => 1396745570
)
哇!时间戳 1396745563 的原始会话变量已消失,取而代之的是一个新变量。
我的第一反应是可能缺少session_start(),但事实并非如此。为了进一步说服自己这很奇怪,我将代码更改为如下所示:
<?php
$timer = time();
$_SESSION['time_' . $timer] = $timer;
print_r($_SESSION);
?>
我认为也许有一个带有索引时间戳的会话变量有某种特殊行为(据我所知,这可能是这个问题的答案)。
这一次,行为完全符合我的预期。页面的每次刷新都添加到数组打印输出中。页面刷新几次后,它看起来像这样:
Array
(
[time_1396745663] => 1396745663
[time_1396745667] => 1396745667
[time_1396745671] => 1396745671
[time_1396745675] => 1396745675
[1396745570] => 1396745570
)
那个奇怪的变量是我最初尝试的会话数据(我只是准确地说)。
有人可以解释这种极其奇怪的行为吗?我想不出有什么明显的事情我可以做会导致这种情况。
注意:我怀疑这与 WordPress 有什么关系;我只是为了给出这样做的动机。
【问题讨论】:
-
如果您在顶部添加了
session_start();,您会看到此通知。Unknown: Skipping numeric key。在使用会话之前添加session_start();始终是一个好习惯。