为了账号安全,请及时绑定邮箱和手机立即绑定

如果用户帐户已从数据库中删除但用户已登录,则销毁会话

如果用户帐户已从数据库中删除但用户已登录,则销毁会话

PHP
呼如林 2021-12-03 16:09:47
我在 PHP 中创建了用户系统。现在我想要这个,如果我从数据库中删除用户帐户,那么会话应该被销毁并且用户应该被注销并向他显示一条消息。我已经搜索了很多,我从中得到了一个(堆栈溢出),但这不是我问题的答案。这是链接:删除用户但仍登录后销毁会话。我已经检查了这些答案,但这些不是我的问题的答案。我知道函数,session_destroy()但我怎样才能让它按我想要的方式工作。如何实施才能完成这项工作。下面是用户登录功能代码:public function userLogin($data){        $phone_number = mysqli_real_escape_string($this->db->link, $data['phone_number']);        $password = mysqli_real_escape_string($this->db->link, $data['password']);        if($phone_number == "" || $password == ""){            $loginmsg = "<div class='alert alert-danger'>Phone number or Password must not be empty!<button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>&times;</span></button></div>";            return $loginmsg;        } else {            $this->setSessionDuringLogin($phone_number, $password);        }    }public function setSessionDuringLogin($phone_number, $password){        $query = "SELECT * FROM users WHERE phone_number = '$phone_number' AND password = '$password'";        $result = $this->db->select($query);        if($result != false){            $value = $result->fetch_assoc();            Session::set("userlogin", true);            Session::set("user_id", $value['user_id']);            Session::set("first_name", $value['first_name']);            Session::set("last_name", $value['last_name']);            Session::set("email", $value['email']);            Session::set("password", $value['password']);            header("Location: profile.php");        } else {            $loginmsg = "<div class='alert alert-danger'>Email or Password is wrong.<button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>&times;</span></button></div>";            return $loginmsg;        }    }
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

你需要:


destroy_session();

或者您需要删除会话变量:


unset($_SESSION);

您可以重定向到索引页面:


header('Location: index.php);

exit();

如果会话在数据库上工作,则销毁会话对象。


$pdo = new PDO('mysql:host=localhost;dbname=produkty', 'root', 'root');

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$stmt = $pdo->prepare('SELECT COUNT(*) as cnt FROM users WHERE user_id = :s1');

$stmt->execute( array( ':s1' => $userid ) );

$cnt = $stmt->fetchAll()[0]['cnt'];


if($cnt == 0){

    session_destroy();

    // destroy session here

}


查看完整回答
反对 回复 2021-12-03
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

//call this function at top of every page after login


function checkexistuser(){


$user_id = $_SESSION['user_id'];


$query = "SELECT * FROM users WHERE user_id = '".$user_id."' ";

        $result = $this->db->select($query);

        if($result->num_rows() == 0){


            //destroy_session , redirect, show message whatever you want.

        }


}


查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 211 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信