2013-08-02 42 views
0

我正在设置一个$_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),以及刚刚成立,那么最​​后 会话变量两个变量

现在,如果这个if语句再次用val [1]中的新值调用,比如说59,它将覆盖最后一个,我的print_r将显示 类似的东西:Array ([iamloggedIn] => 1 [userID] => 5 [59] => 1)

它不创建新的会话变量。

这是因为我使用变量作为索引?我首先尝试了一个整数的索引变量,现在作为一个字符串,但结果是一样的。

+1

你是否在你的PHP文件的顶部写了'session_start();'? – DanielX2010

+0

在我设置'$ _SESSION'变量之前,我在上面的代码中调用了'session_start()'。 – user2250892

+0

在处理完所有Cookie和会话之前,您可能不应该产生任何输出。 – starlocke

回答

4

$ _SESSION变量必须是关联数组,从而

$ _SESSION ['33' ] = '富';

不幸的是,因为“33”尽管是一个字符串将被作为数组的整数键被铸造。有关如何键自动铸造更多的细节:

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

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

浮点数也被转换为整数,这意味着小数部分将被截断。例如。关键8.7实际上将在8

BOOLS存储被转换为整数,也即真正的关键实际保存在1和键盘假下0

空将转换为空字符串,即密钥null将实际存储在“”下。

+0

之前在上面的代码中调用session_start()有趣!之前不知道“会投到整数”的事情。 – starlocke

1

只有你向我们展示什么看,你是对的,print_r($_SESSION)应该被显示:

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

我想尝试索引之前连接字符串,像这样:

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

并通过$_SESSION['example55']访问它。

+0

我刚才在设置$ _SESSION变量 – user2250892