php注销无问题

问题描述 投票:1回答:1

我的登出脚本遇到一些严重问题(90%的时间崩溃)

重要

该脚本必须从数据库和cookie中删除令牌(如果存在)(请记住我已设置),然后应取消设置$_SESSION['user_id']并同时重新加载页面

问题是有时它会在删除用户会话之前重新加载页面,并一直显示成员页面,直到我再次重新加载(我使用一个包含登录名和成员页面的索引文件,并用if($person->is_logged())分隔]

例如:当我按下注销按钮时,有时它会从数据库中删除令牌而不会破坏用户会话,或者有时是相反的,但是主要的问题是它崩溃并同时显示成员和登录页面,直到我再次重新加载以仅显示正确的字符页面

这是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, '/');
        }

是否有任何好的做法可以强制100%退出而没有任何问题?

php ajax logout
1个回答
1
投票
我认为您必须在代码中添加一些条件,对于js代码,在重新加载页面之前,您必须先从connect.php页面获取答案,因为有时php执行需要花费更多的时间,而后使用usuel,因此页面必须在和过程之前重新加载。另外,您还必须向注销功能添加条件,以便在查询由于某些原因而失败时无法破坏会话,如果一切正常,则发送对JS代码的答案,以便在不显示错误消息时可以重新加载页面,并且尝试再次调用js
© www.soinside.com 2019 - 2024. All rights reserved.