会话变量似乎无法保存

时间:2012-03-05 17:15:20

标签: php session time

非常简单的代码:

<?
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。 我做错了什么?

3 个答案:

答案 0 :(得分:6)

  

$_SESSION关联数组中的键与PHP中的常规变量名称具有相同的限制,即它们不能以数字开头,必须以字母或下划线开头。有关详细信息,请参阅本手册中有关变量的部分。

http://php.net/manual/en/session.examples.basic.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"