1

我遇到了一个奇怪的 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"]。这对我来说没有意义。有谁知道发生了什么?或者它只是发生在我的服务器上???

4

3 回答 3

6

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

于 2012-11-30T10:48:28.977 回答
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。

于 2012-11-30T10:52:00.717 回答
-2
<?php
session_start();
$_SESSION["test"] = "Original////";
$test=$_SESSION["test"];
echo $_SESSION["test"];
$test="New////";
echo $_SESSION["test"];
?>

我已经在我的环境中尝试过你的代码,它运行得很好。它总是打印 Original////Original//// 所以它只发生在你的服务器上

于 2012-11-30T10:53:03.950 回答