$ _SESSION链接到跨页面的变量引用?

时间:2014-12-08 07:47:17

标签: php session session-variables pass-by-reference

我在我的网站上有一个用于存储登录信息的PHP会话。数组的基本结构是:

$_SESSION = Array(

    [uid]=>Int
    [acc]=>Array
    [lastAction]=>Timestamp

)

当我在登录PHP脚本中设置这些会话变量时,我将它们设置为:

$_SESSION["uid"] = $uid;
$_SESSION["acc"] = array(...);
$_SESSION["lastAction"] = time();

在我稍后使用MySQLi绑定一些变量之前我得到一个脚本之前,这从未提出过问题。我想从我的一个表中检索uid变量,所以我继续这样做:

$stmt = $link->prepare("SELECT `uid` ... FROM ...");
...
$stmt->bind_result($uid, ...);

该语句运行没有问题,数据全部正确,但现在会话出现问题。

显然,$_SESSION["uid"]仍然与引用$uid绑定,即使我现在位于不同的页面上,并且在设置会话时我没有通过引用传递变量。


为了测试这个理论,我继续设置我的会话并运行这段代码:

<?php

    session_start();
    $uid = 1823479;
    print_r($_SESSION);

?>

果然,$_SESSION["uid"]等于1823479。

这是预期的行为吗?我之前从未遇到过这个问题,但由于我没有使用引用设置会话,在我看来这不是预期的行为。

其他信息:

  

PHP Ver:5.3

1 个答案:

答案 0 :(得分:2)

使用phpinfo()检查register_globals是否设置为&#34; off&#34;。听起来它可能被设置为&#34; on&#34;,在这种情况下,$ _SESSION [&#34; uid&#34;]将与$ uid相同。

In PHP, why are my session variables persisted as references? http://bytes.com/topic/php/answers/759731-register_globals-off-session-side-effect