检查用户名后重定向ajax调用;密码


redirect ajax call after checking username & password

我试图让我的登录请求重定向到一个会话"logged_in"与php头位置,如果用户名和密码是正确的,我的问题是,header("Location:secret.php");不会做任何事情,唯一的工作是echo..我不知道为什么:/

下面是我的代码: HTML

<html>
<head>
</head>
<body>
<div class="login_box">
    <div class="user_logo"></div>
    <div class="login_form">
        <form>
            <input id="username" type="text" placeholder="Username">
            <input id="password" type="password" placeholder="Password">
            <input id="login" type="button" value="Login">
        </form>
    </div>
    <p id="result"></p>
</div>
<script src="script/jquery-2.1.4.min.js"></script>
<script src="script/ajax_script.js"></script>
</body>
</html>
Ajax脚本

$(document).ready(
function(){
    $('#login').click(function(){
        $.post("ajax.php",
        {
            username : $('#username').val(),
            password : $('#password').val()
        },
            function(data){
                if (data=="0") {
                    $('.login_box').addClass("overflow");
                    var $login_form =   $('.login_form').addClass("error_shake");
                    $('.login_form input').addClass("error_border");
                    setTimeout(function() {
                        $login_form.removeClass("error_shake");
                    }, 300);
                    $('#result').html('Forkert brugernavn eller adgangskode!');
                }
            }
        );
    });
}
);
PHP

require('includes/db.php');
if ( isset($_POST['username']) && isset($_POST['password']) ) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
    $result = $db->query($query); // udfører databaseopkald og sætter det ind i vores query
    $rows = $result->num_rows; // hent antal rækker og sæt det ind i resultat
    if($rows == 1){
        $_SESSION['logged_in'] = TRUE;
        while ($row = $result->fetch_assoc()) {
            $_SESSION['user_id'] = $row['ID'];
        }
        header("Location:secret.php"); //THIS WON'T WORK
    }
    else{
        echo "0";
    }
}

重定向到

的秘密站点
<?php
session_start();
if ($_SESSION['logged_in'] != TRUE) {
    header("Location: index");
    exit();
}
?>

Top secret!!!

我希望有人知道怎么做,或者有一些想法。谢谢!

由于您正在进行Ajax调用,因此无法以这种方式重定向。如果你想,你可以从你的php在你重定向的地方返回一个字符串,你想重定向到的路径,然后在你的javascript做一些像location.href = "your_secret_url"重定向。

(未测试)例子:

PHP:

if($rows == 1){
    $_SESSION['logged_in'] = TRUE;
    while ($row = $result->fetch_assoc()) {
        $_SESSION['user_id'] = $row['ID'];
    }
    // Yeah, we're logged in!
    $result = array(
        'result' => 1,
        'location' => '/secret.php',
    );
}
else{
    // Nope.
    $result = array(
        'result' => 0,
    );
}
// return the result
echo json_encode($result);
die();

JS:

$.post("ajax.php",
{
    username : $('#username').val(),
    password : $('#password').val()
},
    function(data){
        if (data.result == 0) {
            $('.login_box').addClass("overflow");
            var $login_form =   $('.login_form').addClass("error_shake");
            $('.login_form input').addClass("error_border");
            setTimeout(function() {
                $login_form.removeClass("error_shake");
            }, 300);
            $('#result').html('Forkert brugernavn eller adgangskode!');
        } else if (data.result == 1) {
            location.href = data.location;
        }
    }, "json" // get content which has been returned in json format
);

编辑可能重复:使用AJAX调用PHP函数,但重定向不起作用

将ajax调用的页面重定向到secret.php。这不会影响正在从中运行ajax请求的调用页面。