【问题标题】:php logout without issuesphp注销没有问题
【发布时间】:2020-06-13 12:22:58
【问题描述】:

我的注销脚本有一些严重的问题(它在 90% 的情况下都会崩溃)

重要

脚本必须从数据库和 cookie 中删除令牌(如果存在) (记住我 isset)然后它应该取消设置 $_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% 退出而没有任何问题?

【问题讨论】:

  • 对于良好实践的起点,您的查询应该是DELETE FROM `users_sessions` WHERE `session_token` = ? AND `user_id` = ?。始终参数化。你也应该使用$_SESSIONs,而不是$_COOKIEs
  • @user3783243 是的,准备好的声明,我打算在我解决这个问题后这样做,但谢谢
  • cookie 的好处是当您返回站点时它们会记住您,您应该在登录时将 cookie 会话从非活动更新为活动,而不是在注销时删除。删除 cookie 意味着您不使用 cookie 的好处
  • @Dlk 我只在注销操作后删除 cookie
  • 那么为什么要使用cookies呢?他们有什么好处? PHP 会话就足够了。

标签: php ajax logout


【解决方案1】:

我认为您必须在代码中添加一些条件, 对于 js 代码,您必须在重新加载页面之前从页面 connect.php 获得答案,因为有时 php 执行需要更多时间然后usuel所以页面在进程之前重新加载.. 此外,您必须在注销功能中添加条件,因此如果由于某种原因查询失败,则不会破坏会话,如果一切正常,则向 js 代码发送答案,以便在不显示错误消息的情况下重新加载页面和尝试再次调用js

【讨论】:

  • 看起来复杂但合乎逻辑,我会试试这个并尽快回复您
  • fixed mate,我发现我以前在$.post之前调用windows location reload
猜你喜欢
  • 2012-05-23
  • 2013-05-11
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多