首页 文章

当register_globals关闭时,PHP5 $ _SESSION无效

提问于
浏览
0

我知道,这个问题多次问过,但我找不到解决办法 .
我编写了一个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中的loged用户名 .
我的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) outputs nothing.
我搜索了很多地方,我发现这是因为register_globals关闭了 . 我理解为什么会这样 .
但为什么我无法获得$ _SESSION ["id"]的值并将其分配给我的system.php中的$ userno
NOTE :我对许多其他请求使用相同的data.php文件,所有这些请求都依赖于用户名,但不同的条件会更改用于数据源的表,因此我无法在开始时获取信息 .
谢谢你...
注意:因为我找不到正确的方法来使用代码突出显示我把>?php用于启动php代码部分和>脚本用于JS代码部分..

4 回答

  • 0

    这很有意思,我知道为什么我之前没有控制)有一些错误说:会话已经发送...像错误
    我发现一个论坛页面说:
    有时问题是由 Include Unicode Signature (BOM) 属性引起的,然后我控制了我的编码类型,我看到它是带有BOM的Unicode(我使用没有BOM,但我不明白它是怎么发生的),当我转换没有bom问题解决了 .

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

  • 0

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

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

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

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

    你得到了什么?

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

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

相关问题