为什么不';在jQueryAJAX请求中赋值时,t PHP变量保持设置状态


Why don't PHP variables stay set when assigned values in a jQuery AJAX request

我使用jQuery$.post AJAX请求登录用户,并在AJAX.php中设置$_SESSION['login']变量(SESSION_start()在index.php中调用)以及其他登录内容,但是当我尝试在其他页面上引用$_SESSION['login']变量时,它不会被设置。。。

这是我的邮政编码

    $.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;
        }
    }

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

注意:不适用于include/require中包含的文件。

如何在客户端保存会话?

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

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