关于php $ _SESSION数组的一个愚蠢的“重要”问题

时间:2011-01-27 19:34:17

标签: php arrays session

我有2个文件放在$ _SESSION数组中。 file1.php

<?php
session_start();

$_SESSION[] = 'Hi';

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

打印

Array
(
    [0] => Hi
)

与file1

类似的file2.php
<?php
session_start();

$_SESSION[] = 'There!';

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

我想首先转到file1,然后转到file2。 在file2中打印$ _SESSION应输出

Array
(
    [0] => Hi
    [1] => There!
)
我错了吗?

我要提到的是我收到通知:第0行的Unknown中未知的跳过数字键0。 我的php.ini中的register_globals设置为Off。

正如我在你的评论中看到的那样,file2打印了一个包含2个项目的数组,而对于其他人(比如我),'hi'项目会丢失。这似乎发生了,但不是对于Marc B,只有当我们使用数字作为会话数组的索引而不是字符串时。

对于Marc B,会话的行为符合我的预期。你能在这里发布你的php.ini吗?所以我可以将你与我的进行比较吗?

5 个答案:

答案 0 :(得分:5)

$_SESSION这样的超级全局不是正常的数组。你应该在$_SESSION内存储一个数组,如下所示:

文件1:$_SESSION['foo'][] = 'Hi!';

文件2:$_SESSION['foo'][] = 'there';

答案 1 :(得分:0)

您没有给$_SESSION相应的密钥。

答案 2 :(得分:0)

不,那应该有效。事实上,如果你只是不断重新加载file1,你只需要获得一系列的“Hi”,“Hi”,“Hi”等数组条目。

答案 3 :(得分:0)

你有什么特别的原因吗

$_SESSION[]='Hi' instead of $_SESSION["Greet"]='Hi'?

我已经测试了你的代码。当我启动file1.php时,我有以下内容:

Array
(
    [0] => hi
)

带有以下注意事项:第0行的未知中未知的跳过数字键0 之后我继续使用file2.php我有以下内容:

Array
(
    [0] => there!
)

同样的通知。只是回答你的问题你错了:)。 如果您将索引(分别为“greet”和“meet”)添加到会话变量,那么这将是第1页上的输出:

Array
(
   [greet]=> hi      
)

当你继续使用file2.php时,你会得到:

Array
(
  [greet] => hi
  [meet] => there!
)

答案 4 :(得分:-1)

文件1:

<?php
session_start();

$_SESSION['0'] = 'Hi';

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

That prints 
Array
(
    [0] => Hi
)

和file2.php类似于file1但会话索引不同

<?php
session_start();

$_SESSION['1'] = 'There!';

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

Now this prints 
Array
(
    [0] => Hi
    [1] => There!
)