Страница не перенаправляет после входа в систему - PullRequest
1 голос
/ 17 апреля 2020

Привет, я новичок в использовании AJAX и jquery, и я пытаюсь создать систему входа в систему, но когда я пытаюсь войти в систему, она успешно создает $ _SESSION, но не перенаправляет на следующую страницу, которую я пытался использовать window.location .replace, но это не похоже на работу. Я пытался найти ответы, но ни один из них, кажется, не работает. Надеюсь, кто-нибудь может мне помочь.

php

 try {
    // sql here
    $sql = ("SELECT * FROM users WHERE username = :username");
    $stmt = $db->connection->prepare($sql);
    $stmt->execute(array(
        ':username' => $form_USERNAME
    ));
    $row=$stmt->fetch(PDO::FETCH_ASSOC);

    //check if username is existing in database
    if($form_USERNAME == $row['username']){
        if(password_verify($form_PASSWORD, $row['user_pass'])){
            session_start();

            $_SESSION['loggedin'] = true;
            $_SESSION['userid'] = $row['user_id'];
            $_SESSION['username'] = $row['username'];
            $_SESSION['usertype'] = $row['user_type'];

            echo json_encode(array('result' => 'ok'));
        }
        else{
            echo json_encode(array(
                'error' => array(
                    'msg' => 'Invalid Username or password'
                ),
            ));
        }

    }
    else{
        echo json_encode(array(
            'error' => array(
                'msg' => 'User not found'
            ),
        ));
    }

} catch (Exception $e) {
    echo json_encode(array(
        'error' => array(
            'msg' => $e->getMessage(),
            'code' => $e->getCode(),
        ),
    ));
}

?>

jquery

<script>
$(function () {
    $('#frmLogin').on('submit', function (e) {
        e.preventDefault();
        var FormData = $('#frmLogin').serialize();

        $.ajax({
            type: 'post',
            url: '../forms/login.php',
            data: FormData,
            dataType: 'json',
            encode: true,
            beforeSend: function () {
                $('#frmBtnLogin').text("Logging in");
            },
            success: function (data) {
                if (data.error) {
                    $('#frmLoginUsername').text('');

                    alert(data.error.msg);
                } else {
                    alert(data.result);

                }

                $('#frmBtnLogin').text("Log in");
            }
        });
    });
});

Итак, я попытался найти ответы вокруг net и попробовал пару вещей, но все равно не получилось

ОБНОВЛЕНИЕ jquery

<script>
$(function () {
    $('#frmLogin').on('submit', function (e) {
        e.preventDefault();
        var FormData = $('#frmLogin').serialize();

        $.ajax({
            type: 'post',
            url: '../forms/login.php',
            data: FormData,
            dataType: 'json',
            encode: true,
            beforeSend: function () {
                $('#frmBtnLogin').text("Logging in");
            },
            success: function (data) {
                if(data.result == "ok"){

                    window.location.replace("user-home.php");
                }
                else if (data.error) {
                    $('#frmLoginUsername').text('');

                    alert(data.error.msg);

                $('#frmBtnLogin').text("Log in");
            }
        }
        });
    });
});

1 Ответ

1 голос
/ 17 апреля 2020

Сервер не может перенаправить пользователей на соответствующую страницу при использовании AJAX для связи с ней. Ваш интерфейс просто получит возможные перенаправленные данные ответа.

Если вы не используете AJAX, вы можете просто добавить что-то подобное в ваш скрипт php:

header('Location: https://my.page/to/redirect/to.php');

Но поскольку вы используете AJAX, ваш интерфейс просто получит данные, обслуживаемые перенаправлением, как если бы это был обычный ответ.

Вместо этого рассмотрите возможность оценки реализации AJAX. статус HTTP-ответа:

// Your PHP script
try {
    // check validity
    http_response_code(200); // OK response status
    echo $response;
} catch (\Throwable $exception) {
    // handle error
    http_response_code(401); // Not OK response status
    echo $response;
}

Затем ваш внешний интерфейс проверит код статуса http в ответе, чтобы решить, что делать дальше.

Например:

// when handling the asynchronous reponse in Javascript
if (xhr.status === 200) {
    // redirect to successful login page
    window.location.href = 'https://my.page/succesful-login';
} else {
    // redirect to invalid login page
    window.location.href = 'https://my.page/invalid-login';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...