我在我的网站上有一个用于存储登录信息的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
答案 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