PHP的真实SESSION对象

lep*_*epe 2 php reference var-dump superglobals httpsession

编辑:(更新)

也许我的问题不够明确.好的,我们这样说吧:

$arr["a"] = 10; 
var_dump($arr);
$arr["b"] =& $arr["a"];
var_dump($arr);
Run Code Online (Sandbox Code Playgroud)

第一个var_dump返回:

array
  'a' => int 10
Run Code Online (Sandbox Code Playgroud)

而第二个回归:

array
  'a' => &int 10
  'b' => &int 10
Run Code Online (Sandbox Code Playgroud)

如果我取消设置($ arr ["a"]),它将返回:

array
  'b' => int 10
Run Code Online (Sandbox Code Playgroud)

规则是,当2个或更多变量"指向"相同内容时,var_dump将显示带有&符号(&)的引用.

在$ _SESSION的情况下,即使使用 register_long_arrays = Off $ _SESSION仍然显示引用.所以很明显,其他变量也指向相同的内容.

换句话说,如果我取消设置($ _ SESSION),仍然可以链接到某个地方的其他变量.在上面的例子中,当我取消设置($ ARR [ "一"]) :我仍然可以,如果我创建链接,像恢复内容$ ARR [ "z"的] =&$ ARR [ "b"的].

所以,我原来的问题是,有谁知道其他变量是什么?这个变量很可能不存在......但我想知道为什么PHP内部会显示这个变量.

谢谢


(原始问题:)

在PHP中创建会话时,例如:

session_start();
$_SESSION["name"] = "my name";
Run Code Online (Sandbox Code Playgroud)

并转储GLOBAL变量:

var_dump($GLOBALS);
Run Code Online (Sandbox Code Playgroud)

你会看到类似的东西:

  'HTTP_SESSION_VARS' => &
    array
      'name' => string 'my name' (length=7)
  '_SESSION' => &
    array
      'name' => string 'my name' (length=7)
  'HTTP_SERVER_VARS' => 
    array
      ...
Run Code Online (Sandbox Code Playgroud)

如您所见,变量$ GLOBAL [HTTP_SESSION_VARS]和$ _SESSION都是对其他对象内容的引用......有谁知道哪个是该对象?

从理论上讲,如果我取消设置两个变量,那么必须有可能访问该内容......任何线索?

谢谢!

Pas*_*TIN 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);
Run Code Online (Sandbox Code Playgroud)

仅输出(经过几次刷新,解释了PHPSESSIDcookie 的存在):

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)
Run Code Online (Sandbox Code Playgroud)

没有任何$HTTP_*_VARS变量的痕迹:register_long_arrays配置指令被禁用.