我遇到了一个奇怪的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”]。这对我来说没有意义。谁知道发生了什么?或者它只是发生在我的服务器上???
答案 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"];
?>
我已经在我的环境中尝试过你的代码运行得很完美。它始终打印原始////原始//// 所以它只发生在你的服务器上