更改PHP会话变量

时间:2012-11-30 10:42:33

标签: php

我遇到了一个奇怪的PHP会话问题。有人可以告诉我,这是会议的工作方式吗?

要查看问题,请将以下代码加载到任何php文件中,例如test.php,并运行2次。注意,您必须运行两次,即加载页面并重新加载。

<?
session_start();
$_SESSION["test"] = "Original////";
$test=$_SESSION["test"];
echo $_SESSION["test"];
$test="New////";
echo $_SESSION["test"];
?>

在我的服务器上,第一次加载此测试页时,我得到了

原//// ////原始

这是正确的。但是当我重新加载它时,我得到了

原//// ////新

这意味着第5行“$ test =”New ////“;”实际上重写了我的$ _SESSION [“test”]。这对我来说没有意义。谁知道发生了什么?或者它只是发生在我的服务器上???

3 个答案:

答案 0 :(得分:6)

似乎在您的服务器上启用了register_globals。您需要禁用该指令。

答案 1 :(得分:1)

首先,不要使用<?作为PHP的起始标记,请使用<?php。其次,如果您启用了register_globals,这是预期的行为。看看这个链接:

http://www.theblog.ca/session-register-globals

标题是:

  

当register_globals打开时,会话变量会覆盖全局变量

示例代码与您的类似:

<?php
session_start();
$canadaday = 'July 1st';
$_SESSION['canadaday'] = 'July 2nd';

print '<p>When is Canada Day?</p>';
print '<p><strong>' . $canadaday . '</strong></p>';
?>

使用register_globals,结果为July 2nd。 HTH。

答案 2 :(得分:-2)

<?php
session_start();
$_SESSION["test"] = "Original////";
$test=$_SESSION["test"];
echo $_SESSION["test"];
$test="New////";
echo $_SESSION["test"];
?>

我已经在我的环境中尝试过你的代码运行得很完美。它始终打印原始////原始//// 所以它只发生在你的服务器上