如果同名的变量被取消,会话值将被删除

时间:2013-05-31 15:36:55

标签: php session

我有以下脚本名为index.php:

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

//some other stuff

$lang = "abc";
$_SESSION['lang'] = $lang;
?>

在第一次通话时,它会按预期返回

Array () Array ()

在第二个电话(如果我按F5),这是惊人的imho,这个输出出现:

Array ( [lang] => abc ) Array ()

使用键&#34; lang&#34;的会话值如果我只是将变量$lang设置为"",则会清空。为什么会这样?

编辑:我正在运行PHP 5.2.17。

1 个答案:

答案 0 :(得分:1)

检查此http://php.net/manual/en/security.globals.php以及What are register_globals in PHP?

但如果我想简单地说:如果register_globals为ON,则所有$ _POST和$ _GET以及$ _SESSION变量将自动复制到其索引名称相同的变量。例如,当您有一个$foo你无法理解它来自哪里($ _GET ['foo'],$ _SESSION ['foo']等)。

AND正如@EricCitaire所说“只是禁用它,它的默认值是自PHP 4.2以来的默认值,在5.3中已弃用,因为严重的安全问题而在5.4中删除。”

您可以使用php.ini.htaccess并使用ini_set()

将其设置为关闭状态
ini_set('register_globals', 'Off')

其他链接:

Dealing with register_globals

http://php.net/manual/en/function.ini-set.php

register globals php