php выход без проблем - PullRequest
       11

php выход без проблем

1 голос
/ 29 февраля 2020

У меня возникли серьезные проблемы с моим сценарием выхода из системы (это происходит sh 90% времени)

Важно

сценарий должен удалить токен из базы данных и куки, если они существуют (помните меня isset), а затем они должны сбросить $_SESSION['user_id'] и одновременно перезагрузить страницу

Проблема в том, что иногда она перезагружает страницу перед удалением пользовательского сеанса и сохраняет показ страницы участника, пока я не перезагружаюсь (я использую один индексный файл, который содержит логин и страницу участника, разделенные if($person->is_logged()))

например: когда я нажимаю кнопку выхода из системы, иногда он удаляет токен из базы данных, не уничтожая пользователя сеанс или иногда его противоположность, но главная проблема в том, что он обрабатывает sh и показывает как страницу участника, так и страницу входа в систему, пока я не перезагружаюсь, чтобы показать только правильную страницу

это ajax код

$("#signout").click(function () {
        var post_data = {
            'type': 'sign_out'
        }
        $.post('processing/core/connect.php', post_data, function (data) {
            window.location.reload();
        });
    });

тогда это php файл подключения:

if ($_POST['type'] == 'sign_out') {

    $person->logout();
}

А это моя функция выхода из системы:

    private $cookie_user_id = "c_user";
    private $cookie_session_token = "xs";

    public function logout()
        {
            global $database;

            /* delete token from database */
            $database->query("DELETE FROM `users_sessions` WHERE `session_token` = '{$_COOKIE[$this->cookie_session_token]}' AND `user_id` = '{$_COOKIE[$this->cookie_user_id]}'");
            /* destroy the session */
            unset($_SESSION['user_id']);
            /* unset the cookies */
            setcookie($this->cookie_user_id, null, -1, '/');
            setcookie($this->cookie_session_token, null, -1, '/');
        }

Любая хорошая практика ces заставить 100% выйти из системы без проблем?

1 Ответ

1 голос
/ 29 февраля 2020

Я думаю, что вы должны добавить некоторые условия в свой код. Для кода js вы должны получить ответ со страницы connect. php перед перезагрузкой страницы, потому что иногда выполнение php занимает больше времени, чем обычно поэтому страница перезагружается перед и процесса. Также необходимо добавить условия в функцию выхода из системы, чтобы сеанс нельзя было уничтожить, если по каким-либо причинам произошел сбой запроса, и отправить ответ на код js, если все выполнено. хорошо, так что страницу можно перезагрузить, если не отображается сообщение об ошибке и попытаться вызвать js снова

...