代码之家  ›  专栏  ›  技术社区  ›  lepe

PHP的真实会话对象

  •  2
  • lepe  · 技术社区  · 15 年前

    (更新)

    也许我的问题还不够清楚。好吧,我们这样说:

    $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
    

    在$会话的情况下,即使 register_long_arrays=关 $会话仍显示引用。所以很明显,其他变量也指向相同的内容。

    未设置($arr[“a”]) $arr[“z”]=&$arr[“b”]

    所以,我最初的问题是,有人知道另一个变量是什么吗?很可能这样的变量不存在。。。但我想知道为什么PHP内部会显示这个引用。

    谢谢你


    (原题:)

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

    session_start();
    $_SESSION["name"] = "my name";
    

    并将全局变量转储为:

    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变量都是 引用其他对象的内容。。。有人知道那是什么东西吗?

    理论上,如果我取消设置这两个变量,就一定可以访问 内容。。。有线索吗?

    谢谢您!

    4 回复  |  直到 15 年前
        1
  •  5
  •   Pascal MARTIN    15 年前

    $HTTP_SESSION_VARS 是旧的,弃用的,名字 $_SESSION

    那些 $HTTP_*_VARS 变量不一定要设置:它们只在 register_long_arrays (即PHP5.3) ,已被弃用。


    例如,在运行PHP 5.3.2的服务器上,您提供的代码部分:

    session_start();
    $_SESSION["name"] = "my name";
    var_dump($GLOBALS);
    

    仅输出 (经过几次刷新,这解释了 PHPSESSID 饼干)

    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)
    

    没有任何痕迹 变量: 寄存器长数组 配置指令已禁用。

        2
  •  0
  •   tangrs    15 年前

        3
  •  0
  •   animuson    15 年前

    它是存储在会话文件中的数据数组,会话文件是存储在服务器上的实际临时文件。就像它们都指向的那样,它是一个数组,没有“Session”对象。当您运行 session_start 它基本上是基于该用户的PHPSESSID cookie从文件中加载数据。

        4
  •  0
  •   aefxx    15 年前

    $HTTP_SESSION_VARS 仅为兼容性原因而保留。强烈建议您使用 $_SESSION 相反。从PHP手册:

    $HTTP_SESSION_VARS包含相同的初始信息,但不是超全局的。 (请注意,$HTTP_SESSION_VARS和$_SESSION是不同的变量,PHP处理 它们本身)

    编辑
    你说你“已经知道了”!?那你的问题是什么? $会话 $_SESSION['key'] .

    您可以编写自己的会话类来包装PHP的会话管理。使用 session_set_save_handler

    当做。