在PHP 5.3中PHP寄存器全局支持?

时间:2014-01-19 05:41:55

标签: php

我一直在使用PHP 5.2并使用register_globals ON。现在我转向PHP 5.3,我明白我必须改变一些编码。我已经读过这篇文章,但我仍然没有清楚地了解我必须做出哪些改变。

在5.2中我使用

session_start();

在我的表格顶部。在5.3中我还需要这样做吗?

我目前也使用像这样的变种

$_SESSION[php_g_name"] = "John";

if ($_SESSION["php_g_name"] == "")

可以继续在5.3中使用吗?如果没有,vars的语法是什么?

感谢您的任何澄清。

2 个答案:

答案 0 :(得分:1)

PHP Register_Globals是最具代表性的,但也是PHP最受辱骂的“功能”之一。这使得早期的PHP能够获得如此多的牵引力和使用率。

你可以这样做

<?php
 //for a url example.com/myfile.php?UserName=Toby
 echo "Hello $UserName";
?>

它使得从_GET和_POST访问变量变得非常容易,而且(例如在你的情况下)_SESSION。

然而它的安全隐患非常严重,默认情况下已关闭,因为php 4左右(有人会告诉我)。

基本上,对您来说意味着,如果您这样做是为了访问您的会话变量

<?php
 session_start();
 echo $php_g_name ;

使用寄存器全局变量$ php_g_name会有一个值,现在它不会。然而,这将有效。

<?php
 session_start();
 echo $_SESSION["php_g_name"] ;

如果你现在正在这样做,你应该没事。您需要更改代码以始终使用包含数组,例如$_SESSION

答案 1 :(得分:0)

是的,您仍然需要在每个文件的顶部设置会话开始。 对于变量,$_SESSION["php_g_name"]将起作用,但$php_g_name不会,除非您声明$php_g_name = $_GET(or session)["php_g_name"]