当register_globals关闭时,PHP5 $ _SESSION无效

时间:2011-10-21 01:40:07

标签: php javascript session register-globals

我知道,这个问题多次问过,但我找不到解决办法 我编写了一个php / JS脚本来从服务器获取数据并显示它们。
我使用Ajax验证是否经过用户身份验证?我用下面的方法来做;
我的index.php:

>?php
...
...
$.post("data.php",{ req:'login',
username:$('#username').val(), //user enters given id
pass:$('#password').val(),
job:$('#job').val(),
rand:Math.random() } ,
function(data)
{
if (data == 'yes') // user is authenticated.
document.location='system.php';
}
...
...
// i am using a form to send collected data to data.php
?>
data.php代码中的

是这样的:

>?php
session_start();
$link = mysql_connect("localhost", "user", "pass"); 
if (!$link) {
    die("No connection : " . mysql_error());
}
    mysql_select_db("database");

if ($_POST["req"] == "login"){
    $user_id=($_POST["username"]);
    $user_pass=($_POST["pass"]);
    $user_job=($_POST["job"]);

    // select proper table (related to his/her job) and control did user supplied correct password?

    if( password is correct ){
    $_SESSION["id"]=$_POST["username"];
    // or $_SESSION["id"]=$user_id;
    echo "yes";
    }
    else echo "no"; //Invalid Login
} else if ($_POST["req"] == "userinfo"){
...
...
...
} else 
...
...
?>

系统工作正常,直到这里,我重定向到system.php,在system.php中,我想使用$ _SESSION变量来获取JavaScript中的用户名。
我的system.php的一部分;

>?php
session_start();
if ((isset($_SESSION["id"]))||(!empty($_SESSION["id"]))) header("Location:index.php");
$userno = $_SESSION["id"];
if(isset($_GET["logout"]))
{
    session_destroy();
    $_SESSION["id"] = FALSE;
    header("Location:index.php");
}
?>
...
...
...
>script type="text/javascript">
$.post("data.php",{ req:'userinfo',username:'>?php echo ($userno) ?>',rand:Math.random() } ,function(data){
// sure ?php is written corrctly in script ;)
//.... again get data from data.php and put results into page..
});
>/script>

此代码在我的电脑(xampp)中正常工作,但在我的服务器上没有机会..
echo($ userno)什么都不输出。
我搜索了很多地方,我发现这是因为register_globals已关闭。我理解为什么会这样。
但为什么我无法获得$ _SESSION [“id”]的值并将其分配给我的system.php中的$ userno
注意:我对许多其他请求使用相同的data.php文件,所有这些请求都依赖于用户名,但不同的条件会更改用于数据源的表,因此我无法获取信息。 begining。
现在谢谢...
注意:因为我找不到正确的方法来使用代码突出显示我把>?php用于启动php代码部分和>脚本用于JS代码部分..

4 个答案:

答案 0 :(得分:0)

我认为它应该是$_SESSION,而不是$_session。它是一个超全球化,它区分大小写。

答案 1 :(得分:0)

echo '<pre>';
print_r($_SESSION);
die;

你得到了什么?

检查服务器端$userno的内容:

$userno = $_session["id"];
var_dump($userno);
die;

答案 2 :(得分:0)

非常有趣,我已经在我的服务器上控制了error.log文件(我不知道为什么我之前没有控制)有一些错误说:会话已经发送...像错误
我找到了一个论坛页面,上面写着:
有时问题是由包含Unicode签名(BOM)属性引起的,然后我控制了我的编码类型,我看到它是带有BOM的 Unicode (我使用没有BOM但是我不明白它是怎么发生的,当我转换没有bom 时,问题就解决了。

这完全是我的错误(甚至是错误信息),感谢您的所有帮助。

答案 3 :(得分:0)

注册您的变量的简单易行的解决方案。

foreach ($_POST as $key => $value) {
 eval("$".$key."= '".$value."';");
}