非常简单的代码:
<?
session_start();
$_SESSION['t'.time()] = "ok";
echo "<pre>".print_r($_SESSION, 1)."</pre>";
?>
正如预期的那样,显示了类似
的内容Array
(
[t1330966834] => ok
[t1330966835] => ok
[t1330966836] => ok
)
重播3页后。
让我们改变几个符号:
$_SESSION[time()] = "ok";
(现在没有't')我希望在重新加载之后能够像
一样Array
(
[t1330966834] => ok
[t1330966835] => ok
[t1330966836] => ok
[1330967020] => ok
[1330967021] => ok
[1330967022] => ok
[1330967023] => ok
)
但实际上结果完全不同:
Array
(
[t1330966834] => ok
[t1330966835] => ok
[t1330966836] => ok
[1330967020] => ok
)
我们有3个先前的阵列单元格,只有一个“时间”单元格 - 无论您重新加载页面多少次。时间是正确的,它每秒都不同但只有一个没有't'的细胞! 我也试过
$t =time();
$_SESSION[$t] = "ok";
甚至
$t =intval(time());
$_SESSION[$t] = "ok";
但它仍然只有一个细胞有时间。
在2个不同的服务器上测试了php 5.2.13和5.3.10。 我做错了什么?
答案 0 :(得分:6)
$_SESSION
关联数组中的键与PHP中的常规变量名称具有相同的限制,即它们不能以数字开头,必须以字母或下划线开头。有关详细信息,请参阅本手册中有关变量的部分。
答案 1 :(得分:5)
当启动error_reporting时,你应该注意到这一点:
请注意&lt; file&gt;,line ...:
session_write_close()
:正在跳过数字键1330967020
会话变量的数字值为not supported。
答案 2 :(得分:2)
这是不是一个奇怪的事情。它只是简单地跳过数字键。如果已启用通知,则可以看到此错误。
正如this对php.net的评论所述。您不应使用数字键在会话中定义值。
引用
小心不要尝试使用整数作为$ _SESSION数组的键(例如$ _SESSION [0] = 1;),否则您将收到错误“通知:未知:在线未知时跳过数字键0 0"