【发布时间】:2012-03-05 17:15:19
【问题描述】:
很简单的代码:
<?
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。 我做错了什么?
【问题讨论】:
-
尝试同时分配
$_SESSION['t'.time()] = 'ok'; $_SESSION[time()] = 'ok'看看会发生什么。如果t版本不断出现而baretime 版本没有出现,那么就发生了一些奇怪的事情。 -
我对 PHP 会话变量的奇怪之处了解不多,无法回答这个问题,但是当您取出
t时,它变成了数字索引而不是字符串索引。也许 PHP 只在会话变量中存储一个数字索引或什么?不确定,但似乎与此有关。