$ _SESSION,索引为变量而不是停留

时间:2013-08-02 01:41:57

标签: php

我正在设置一个带变量索引的$_SESSION变量,但它不成立。

if (isset($_GET['reply']))
{
 echo  $_SERVER['QUERY_STRING']; // example output: reply&55
 $vals = explode('&',$_SERVER['QUERY_STRING']); // val[1] = 55
 session_start();
 $_SESSION[strval($vals[1])] = 1;  //tried as int first and now convert to string
 print_r($_SESSION);

 }

当我查看$ _SESSION的内容时,它会显示:Array ( [iamloggedIn] => 1 [userID] => 5 [55] => 1 )

它显示了两个使用普通字符串索引设置的变量(例如$_SESSION['userID'] = 5),然后是最后一个 会话变量刚刚设置。

现在,如果使用val [1]中的新值再次调用此if语句,例如59,则覆盖最后一个,我的print_r将显示 类似于:Array ( [iamloggedIn] => 1 [userID] => 5 [59] => 1 )

它没有创建新的会话变量。

这是因为我使用变量作为索引吗?我首先尝试将索引变量作为整数,现在作为字符串,但结果是相同的。

2 个答案:

答案 0 :(得分:4)

$ _SESSION变量必须是关联数组,因此

$ _ SESSION ['33'] ='foo';

不幸的是不会工作,因为'33'尽管是一个字符串将被转换为数组的整数键。有关如何自动投放密钥的更多详细信息:

http://us.php.net/manual/en/language.types.array.php

  

包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被强制转换,因为它不是有效的十进制整数。

     

浮点数也会转换为整数,这意味着小数部分将被截断。例如。密钥8.7实际上将存储在8下。

     

Bool也会被转换为整数,即键值true实际上将存储在1下,而键值为0则为false。

     

Null将被强制转换为空字符串,即密钥null实际上将存储在“”。

答案 1 :(得分:1)

仅根据您向我们展示的内容判断,您是对的,print_r($_SESSION) 显示:

Array([iamloggedIn] => 1, [userID] => 5, [55] => 1, [59] => 1)

我会尝试在索引之前连接一个字符串,如下所示:

$_SESSION['example' . strval($vals[1])] = 1;

例如,通过$_SESSION['example55']访问它。