2012-03-05 249 views
7

很简单的代码:Session变量似乎并没有被保存

<? 
session_start(); 
$_SESSION['t'.time()]  = "ok"; 
echo "<pre>".print_r($_SESSION, 1)."</pre>"; 
?> 

显示,符合市场预期,像

Array 
(
    [t1330966834] => ok 
    [t1330966835] => ok 
    [t1330966836] => ok 
) 

1/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

尝试分配'$ _SESSION ['t'.time()] ='ok'; $ _SESSION [time()] ='ok'',看看会发生什么。 't'版本不断出现,而且正式版本没有显示,然后出现了一些奇怪的情况 – 2012-03-05 17:19:41

+0

我不太了解PHP会话变量的古怪问题来回答这个问题,但是当你把't'它变成了一个数字索引而不是字符串索引,也许PHP只在会话变量中存储一个数字索引或者什么?不确定,但似乎这与它有关。 – Travesty3 2012-03-05 17:22:27

回答

5

当起动使用error_reporting一路上涨,你应该注意到这一点:

注意在<文件>,行...:session_write_close():跳绳数字键1330967020

会话变量的数字变量是not supported

2

这是不是奇怪的的事情。它只是简单地跳过数字键。如果您启用了通知显示,您可以看到此错误。

正如在this上提到的对php.net的评论。您不应该使用数字键在会话中定义值。

报价

注意不要尝试使用整数作为关键$ _SESSION阵列(如$ _SESSION [0] = 1;),或者你将得到错误“通知:未知:跳过数字键0。在未知的第0行“

相关问题