首页 > 解决方案 > 为什么 header('location: ') 不能在使用 ajax 的 php 中工作,但 session 正在工作?

问题描述

我正在使用 ajax 在登录部分发布并创建会话。会话正在工作,但其中的标题('location:chat.php')不起作用(未重定向)。当我尝试登录时,会话已创建但未重定向到 chat.php。我检查了 jQuery 和 ajax 是否正常工作并成功创建会话并登录但未重定向到 chat.php。可以帮助我吗?

jQuery('.userlogin').submit(function(){

            var email = jQuery("input[name='email_address']").val();
            var password = jQuery("input[name='password']").val();

            $.ajax({

                'url'   : 'login.php',
                'type'  : 'POST',
                'data'  : {
                    'loginajax' : '',
                    'email'     : email,
                    'password'  : password

                },
                'success'  : function(output){


                    jQuery('.ama-input').val('');
                }
            });



        });

<?php

session_start();

require_once('functions.php');


if(isset($_POST['loginajax'])){

    $email=$_POST['email'];
    $password=$_POST['password'];

    $query = mysqli_query($connection, "SELECT * FROM users WHERE email='$email'");

    $info = mysqli_fetch_assoc($query);

    $pass= $info['password'];

    if($pass==md5($password)){

        $_SESSION['login'] = "successful";

        header('location: chat.php');
    }




    die();
}



?>








<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Log In</title>

    <link rel="stylesheet" href="style.css">

</head>
<body>

    <div class="box">
        <h2 class="heading">Log In</h2>
        <form action="" method="POST" class="userlogin">

            <input class="ama-input" type="email" name="email_address" placeholder="Email Address" />
            <input class="ama-input" type="password" name="password" placeholder="Password" />

            <input type="submit" name="login" value="Log In" />
        </form>

        <a class="registration" href="register.php">Create an account</a><br />
    </div>

    <script src="js/jquery-3.5.1.min.js"></script>
    <script src="js/script.js"></script>
</body>
</html>

标签: phpjqueryajax

解决方案


PHP 重定向将不起作用,因为您正在进行 ajax 调用。

尝试返回结果并像这样从您的脚本重定向。

$(function () {
    jQuery('.userlogin').submit(function(e){
        e.preventDefault();
        var email = jQuery("input[name='email_address']").val();
        var password = jQuery("input[name='password']").val();
        $.ajax({
            'url': 'login.php',
            'type': 'POST',
            'data': {
                'loginajax': '',
                'email': email,
                'password': password

            },
            'success': function (output) {
                console.log(output);
                if (output.status == 'success') {
                    window.location.href = "your url here";//<- your url here
                }
            }
        });
    });
});

您的 PHP 代码应如下所示:

<?php

session_start();

require_once 'functions.php';

if (filter_input(INPUT_POST, 'loginajax')) {
    $result['status'] = 'unsuccessful';
    $result['message'] = 'login unsuccessful.';

    $email = filter_input(INPUT_POST, 'email_address');
    $password = filter_input(INPUT_POST, 'password');

    $sql = "SELECT id,email,password FROM users WHERE email=?";
    $stmt = mysqli_prepare($connection, $sql);
    mysqli_stmt_bind_param($stmt, "s", $email);

    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_result($stmt);
    mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
    if (mysqli_stmt_fetch($stmt)) {
        if (password_verify($password, $hashed_password)) {
            $_SESSION['login'] = "successful";
            $result['status'] = "success";
            $result['message'] = "login successful.";
        }
    }           
    mysqli_stmt_close($stmt);

    header('Content-Type: application/json');  // <-- header declaration
    echo json_encode($result, true);
}

推荐阅读