Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AJAX的PHP会话:登录过程_Ajax_Jquery_Php - Fatal编程技术网

使用AJAX的PHP会话:登录过程

使用AJAX的PHP会话:登录过程,ajax,jquery,php,Ajax,Jquery,Php,有人能告诉我这个登录设置哪里出了问题吗?我在下面概述了这个过程,并包括了我正在使用的代码。除了会话变量似乎从未被设置之外,一切都正常 我将它们转发到的页面会将会话变量转储到页面上,除非当您进入下一页时,会话变量似乎不存在。如果我将$\u SESSION变量作为对AJAX调用的json响应的一部分返回,它将返回正确的值,但一旦页面发生更改,这些值似乎就会消失 过程: 已提交登录表单 对login.php的AJAX调用 login.php根据数据库检查用户名和密码。 如果找到用户,则为会话设置$会话

有人能告诉我这个登录设置哪里出了问题吗?我在下面概述了这个过程,并包括了我正在使用的代码。除了会话变量似乎从未被设置之外,一切都正常

我将它们转发到的页面会将会话变量转储到页面上,除非当您进入下一页时,会话变量似乎不存在。如果我将$\u SESSION变量作为对AJAX调用的json响应的一部分返回,它将返回正确的值,但一旦页面发生更改,这些值似乎就会消失

过程:
  • 已提交登录表单

  • 对login.php的AJAX调用

  • login.php根据数据库检查用户名和密码。
    如果找到用户,则为会话设置$会话变量, 运行其他一些SQL并返回success,否则返回相应的错误

  • AJAX函数从login.php接收结果,如果成功将用户转发给 客户页面,如果不是,则显示结果中的错误

  • 实际代码: 登录表单发出的jQuery AJAX调用: Login.php:
    解决方案:
    
    PHP会话需要在需要访问会话变量的每个页面上启动,除非PHP配置为自动启动会话。感谢Marc B和nunespascal。

    如果((计数>0)和(计数<2))
    ?如果(计数=1)
    ,那就
    怎么样?这不像你曾经得到过
    1.5
    0.3
    行数据这听起来像是常识,但是你是在logged.php上启动会话的吗?抱歉,超级noob问题即将到来。我是否必须在我想要访问会话变量的每个页面上启动会话?@Stephen:是的,如果PHP没有配置为自动启动会话。并非所有页面都需要会话,因此通常默认为“关闭”。您可以将此答案标记为“已接受答案”,而不是将“解决方案”添加到顶部
    $("#login_form_header").submit(function(event){
    
        event.preventDefault();
    
        $.ajax({
            url: 'xhr/login.php',
            data: $(this).serialize(),
            type: 'post',
            dataType: 'json',
            success: function(result){
                if (result.success){
                    window.location = "logged.php";
                    return false;
                };
            },
            error: function(e){console.log("Could not retrieve login information")}
        });
    
        return false;
    });
    
    <?PHP   
    
    # Start the user session
    if(!isset($_SESSION)) {
        session_start();
    };
    
    # Make sure form data was passed to the script
    IF (isset($_POST['username']) && isset($_POST['password'])){
    
        # Connect to the database
        REQUIRE('../../../../db_oystrr.php');
    
        # Define variables
        $given_username = $_POST['username'];
        $given_password = $_POST['password'];
        $given_username = stripslashes($given_username);
        $given_password = stripslashes($given_password);
        $given_username = mysql_real_escape_string($given_username);
        $given_password = mysql_real_escape_string($given_password);
        $matched_username = "";
        $matched_password = "";
    
    
        # See if there is matching info in the database
        $sql = 'SELECT username, pass FROM users WHERE username="'.$given_username.'"';
        $result = mysql_query($sql);
        while($row = mysql_fetch_assoc($result)){
            $pass_hash = *********;
            if ($pass_hash == $row['pass']){
                $matched_username = $row['username'];
                $matched_password = $row['pass'];
            };
        };
    
    
        # If there was a match
        IF ($matched_username != "" && $matched_password != ""){
    
            # If there is only one result returned
            $session_sql = 'SELECT * FROM users WHERE username="'.$matched_username.'" AND pass="'.$matched_password.'";';
            $session_result = mysql_query($session_sql);
            $returned_row = mysql_fetch_assoc($session_result);
            $user_check = mysql_num_rows($returned_row);
    
            IF(count($user_check) > 0  &&  count($user_check) < 2){
    
                # Set our session values
                $_SESSION['id'] = $returned_row['id'];
                $_SESSION['last_login'] = $returned_row['last_login'];
                $_SESSION['username'] = $returned_row['username'];
                $_SESSION['signup_date'] = $returned_row['signup_date']; 
    
                session_write_close();
    
                # Set users last login date and time and re-hash their password to this login
                $this_login = **********;
                $hashed_password = **********;
                $update_sql = '************';
                mysql_query($update_sql);
    
                echo json_encode(array("success"=>"user logged in", "session"=>$_SESSION));
            }ELSE 
                echo json_encode(array("error"=>"More than one user with the same information.  What did you do?!"));
        }ELSE
            echo json_encode(array("error"=>"Invalid login provided."));
    }ELSE
        echo json_encode(array("error"=>"You must enter a username and Password."))