编辑:(更新)
也许我的问题不够明确。好的,我们这样说吧:
$arr["a"] = 10;
var_dump($arr);
$arr["b"] =& $arr["a"];
var_dump($arr);
第一个var_dump返回:
array
'a' => int 10
第二个回归:
array
'a' => &int 10
'b' => &int 10
如果我取消设置($ arr [“a”]),它将返回:
array
'b' => int 10
规则是,当2个或更多变量“指向”相同内容时,var_dump将显示带有&符号(&)的引用。
对于$ _SESSION,即使 register_long_arrays = Off ,$ _SESSION仍会显示引用。所以很明显,其他变量也指向相同的内容。
换句话说,如果我取消设置($ _ SESSION),仍然可以链接到某个地方的其他变量。在上面的示例中,当我取消设置($ arr [“a”])时,如果我创建链接,我仍然可以恢复该内容,例如: $ arr [“z”] = &安培; $的常用3 [ “b” 的即可。
所以,我最初的问题是,有谁知道其他变量是什么?这个变量很可能不存在......但我想知道为什么PHP内部会显示这个变量。
谢谢
(原始问题:)
在PHP中创建会话时,例如:
session_start();
$_SESSION["name"] = "my name";
并使用以下内容转储GLOBAL变量:
var_dump($GLOBALS);
你会看到类似的东西:
'HTTP_SESSION_VARS' => &
array
'name' => string 'my name' (length=7)
'_SESSION' => &
array
'name' => string 'my name' (length=7)
'HTTP_SERVER_VARS' =>
array
...
如您所见,变量$ GLOBAL [HTTP_SESSION_VARS]和$ _SESSION都是 引用其他对象的内容......有谁知道那个对象是哪个?
理论上,如果我取消设置这两个变量,那么必须有可能访问它 内容......任何线索?
谢谢!
答案 0 :(得分:5)
$HTTP_SESSION_VARS
是$_SESSION
旧的,已弃用的名称 - 您不应该再使用它了。
这些$HTTP_*_VARS
变量不一定是设置的:它们只有在register_long_arrays
配置指令被启用的情况下 - 并且,最新版本的PHP (即PHP 5.3),它已被弃用。
例如,在运行PHP 5.3.2的服务器上,您提供的代码部分为:
session_start();
$_SESSION["name"] = "my name";
var_dump($GLOBALS);
仅输出(经过一次刷新,解释了PHPSESSID
cookie的存在):
array
'GLOBALS' =>
&array
'_POST' =>
array
empty
'_GET' =>
array
empty
'_COOKIE' =>
array
'PHPSESSID' => string 'fnlujfapqg7kdk1ocve6ndb282' (length=26)
'_FILES' =>
array
empty
'_SESSION' => &
array
'name' => string 'my name' (length=7)
没有任何$HTTP_*_VARS
变量的跟踪:register_long_arrays
配置指令被禁用。
答案 1 :(得分:0)
HTTP_SESSION_VARS不是为了向后兼容吗?
答案 2 :(得分:0)
好吧,在PHP 5中$HTTP_SESSION_VARS
仅出于兼容性原因而保留。强烈建议您使用$_SESSION
代替。从PHP手册:
$ HTTP_SESSION_VARS包含相同的初始信息,但不是超全局信息。 (注意> $ HTTP_SESSION_VARS和$ _SESSION是PHP处理的不同变量 他们就这样)
修改强>
你说你“已经知道”了!?你的问题是什么? $_SESSION
不是一个对象,毕竟它是一个ARRAY,一个超全局变量。没有方法,没有成员。您可以像访问任何其他数组一样访问它的值:$_SESSION['key']
。
您可以编写自己的Session类来包装PHP的会话管理。使用session_set_save_handler方法绕过内置会话管理并实现自己的逻辑。
问候。
答案 3 :(得分:0)
这是存储在会话文件中的数据数组,该文件是存储在服务器上的实际临时文件。就像它们都指向的那样,它是一个数组,没有'Session'对象。运行session_start
时会填写这些值,它基本上根据该用户的PHPSESSID cookie从文件中加载数据。