Php 如果同名变量为null,则会删除会话值

Php 如果同名变量为null,则会删除会话值,php,session,Php,Session,我有一个名为index.php的脚本: <?php session_start(); print_r($_SESSION); $lang = ""; print_r($_SESSION); //some other stuff $lang = "abc"; $_SESSION['lang'] = $lang; ?> 在第二次呼叫时(如果我按F5),这是惊人的imho,此输出显示: Array ( [lang] => abc ) Array () 如果我只是将变量$lan

我有一个名为index.php的脚本:

<?php
session_start();
print_r($_SESSION);
$lang = "";
print_r($_SESSION);

//some other stuff

$lang = "abc";
$_SESSION['lang'] = $lang;
?>
在第二次呼叫时(如果我按F5),这是惊人的imho,此输出显示:

Array ( [lang] => abc ) Array ()
如果我只是将变量
$lang
设置为
,则键为“lang”的会话值将被清空。为什么会发生这种情况

编辑:我正在运行PHP5.2.17。

请检查此项,并

但如果我想简单地说:如果
register\u globals
出现在所有$\u POST和$\u GET和$\u会话变量将自动复制到具有相同索引名称的变量中。因此,例如,当您有一个
$foo
时,您无法理解它来自何处($\u GET['foo',$\u SESSION['foo',等等)


正如@EricCitaire所提到的,“只需禁用它,它的默认值是false,因为PHP4.2在5.3中被弃用,并且由于严重的安全问题在5.4中被删除。”

您可以使用
php.ini
.htaccess
ini\u set()来设置它

其他链接:


register\u globals仍处于活动状态?您的register\u globals设置的值是多少?register\u globals处于活动状态-这意味着什么?我刚刚知道它的意思。。但正如我所理解的register_globals,只有像
$lang
这样的变量可以被覆盖,但是如果我将变量设为null,为什么它也会将会话值设为null呢?只需禁用它,它的默认值是false,因为PHP4.2在5.3中被弃用,并且由于严重的安全问题在5.4中被删除。
Array ( [lang] => abc ) Array ()
ini_set('register_globals', 'Off')