为什么在jQuery AJAX请求中指定值时,PHP变量不会保持设置状态

时间:2012-03-25 13:31:36

标签: php ajax jquery

我正在使用jQuery $ .post AJAX请求登录用户,并在ajax.php中设置$ _SESSION ['login']变量(在index.php中调用session_start())以及其他登录的东西,但是当我尝试在其他页面上引用$ _SESSION ['login']变量时,它没有被设置...

这是我的POST代码

    $.post('/assets/ajax/ajaxLogin.php',{username: $('[name=username]').val()
    ,password: $('[name=password]').val()},function(data){

    if(data.success)
    {
      location.href=data.redirect;     
    }
    else
    {
      $('#errorConsole').html(data.message).slideDown();
    }

    },'json');

在ajaxLogin.php中我设置$ _SESSION ['login'] =“1”。所以ajax脚本会记录用户是否有正确的信息,但是当他们被重定向到dashboard.php时,我会尝试回显$ _SESSION ['login']并收到错误,

我没有正确设置$ _SESSION,还是ajax请求不会全局设置变量?

这是ajaxLogin.php

    <?php 

    if(!include('../../config.php')){
        echo 'include failure';
    }

    if($_POST){

        $myusername=$_POST['username']; 
        $mypassword=$_POST['password'];
        // To protect MySQL injection (more detail about MySQL injection)
        $myusername = stripslashes($myusername);
        $mypassword = stripslashes($mypassword);
        $myusername = mysql_real_escape_string($myusername);
        $mypassword = mysql_real_escape_string($mypassword);

        $sql="SELECT * FROM users WHERE username='$myusername' and                 password='$mypassword'";
        $result=mysql_query($sql);

        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);
        if($count==1)
        {
            $_SESSION['login'] = 1;
            $data['success'] = true;
            $data['redirect'] = '/dashboard.php';
        }
        else
        {
            $data['success'] = false;
            $data['message'] = "Your info is wrong....";
        }
        echo json_encode($data);
    }

    ?>

这里也是dashboard.php

    <?php 
        include('includes.php');
    ?>
    <?php
    if(!isLoggedIn())
    {
    echo 'You are not logged in';
    }
    else
    {
    echo 'You are logged in';  
    }
    ?>

和isLoggedIn()是:

    function isLoggedIn(){

        if (isset($_SESSION['login'])){
            return 1;
        }
        else
        {
            return 0;
        }
    }

2 个答案:

答案 0 :(得分:1)

您需要在每个使用会话的页面上(在您使用会话之前)调用session_start()。这包括AJAX请求中使用的每个文件以及dashboard.php文件。

注意:不适用于include / require附带的文件。

答案 1 :(得分:0)

如何在客户端保存会话?

如果您使用的是Cookie,请仔细检查以确保浏览器在下次请求时发送Cookie。如果是,你的会话代码有问题,我们需要看你的PHP。如果不是,请检查PHP错误日志,了解有关无法保存会话的信息。

如果您使用的是URL查询字符串,请确保在请求之间传递它们。