|
基本上这里对关于register_globals的问题实在太多了,其实这类问题本不应用,但是无奈大家手上的简体中文php教程除了php_manual以外都基本是2001年甚至以前的东西了,你会'惊喜'的发现表单值不能传递,URL或者cookie没法用的状况,例如:
[PHP]<?
//这样没用,比如一个表单,URL,cookie或者session的名称为username
echo $username;
//这样才行
echo $_POST[username];
echo $_GET[username];
echo $_COOKIE[username];
echo $_SESSION[username];
?>[/PHP]
不要埋怨这种方法麻烦,因为出于安全性和强调性来考量,比如session和post方法各有一个username值时session会强制覆盖post的值,不行诸位可以试试,覆盖顺序是E(nv)G(et)P(ost)C(ookie)S(ession)(越往后越优先)
说那么多,可大家写程序还是喜欢生搬硬抄教材过来的,遗漏在所难免,此时解决的方法,也许大家都会在php.ini中打开register_globals....可是如果把程序放web服务器上呢??
so,解决方法还有一种.........
[PHP]<?
import_request_variables("GPC", "");
extract($_SERVER);
@extract($_SESSION);
?>[/PHP]
把这几行放在文件头或者include进来,你会发现就算不打开register_globals,也能通过访问$username去获得值了....
另,register_globals关闭的情况下,另一个函数系列session_register是不能用的,怎么办捏?哈哈,其实没有session_register更好
[PHP]<?
session_start();
//旧版方法
session_register("username", "nbx");
//新版方法,直接放进$_SESSION数组
$_SESSION['username'] = "nbx";
//销毁$_SESSION
session_unregister("username");
//这个方法是不是更好?
unset($_SESSION['username']);
?>[/PHP]
php4.2以后,register_globals默认即为off,不推荐大家在服务器上动太多手脚,ini_set是不能设定register_globals的,请大家还是多用$_POST和$_GET等方式,如果觉得麻烦,那大概是因为你自己写function和class的能力为0吧....... |
|