PHP会话副作用警告 - 如何解决?

时间:2010-12-21 00:36:43

标签: php session

我对php很新,我相信这很容易,但我想以正确的方式做到这一点。我有这个脚本:

<?php
if ($_POST["username"]=="") {
    include($_SERVER['DOCUMENT_ROOT'] ."/login.inc.php");
} else { 
    $username=$_POST["username"];
    $password=$_POST["password"];
    session_start();
    if ($username=="bob" AND $password=="123"){ $permission="yes";}
    $username=$_POST["username"];
    session_register("permission");   
    session_register("username");  

    if ($permission=="yes"){
        // Show stuff
    }
}
?>

请原谅我代码的时髦格式 - 似乎无法正常显示。

所以,我一直收到这个错误:

  

警告:未知:您的脚本可能依赖于PHP 4.2.3之前存在的会话副作用。请注意,除非启用register_globals,否则会话扩展不会将全局变量视为数据源。您可以通过将session.bug_compat_42或session.bug_compat_warn分别设置为off来禁用此功能和此警告,分别在第0行的Unknown中

我假设意味着我需要更改我的一个变量名,这样它就不会与会话变量冲突吗?这就是我读到的内容,但我不确定要改变哪一个。

有人可以帮我/告诉我吗?

由于

OSU

2 个答案:

答案 0 :(得分:3)

正是因为

而发生
session_register("username");  

不推荐使用,自PHP 5.3起不推荐使用。

  

如果您希望脚本无论register_globals如何工作,您都需要使用$ _SESSION数组,因为$ _SESSION条目会自动注册。如果您的脚本使用session_register(),则它将无法在禁用PHP指令register_globals的环境中工作。

Source

众所周知,register_globals很糟糕,总是关闭。

注册会话变量的最常用方法是使用$_SESSION超全局,即

$_SESSION['username'] = $username;

答案 1 :(得分:0)

您最好开始删除已弃用的函数,例如session_register()。

使用$ _SESSION数组,例如

$_SESSION['username'] = $_POST['username'];