我有以下脚本名为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。
答案 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')
其他链接: