【问题标题】:How can I make destroy session when I change my password?更改密码时如何进行销毁会话?
【发布时间】:2018-09-04 03:46:12
【问题描述】:

我是 CodeIgniter 框架的中间人

我将开发一个具有“管理员、经理、员工”角色的新系统。我需要如果管理员或经理更改任何员工密码,员工会话需要销毁并从他们的帐户中注销。

我对此一无所知。任何人都可以帮助如何做到这一点,为此我必须选择哪种类型的会话保存路径?

【问题讨论】:

  • 可以成功更新员工数据吗?会话销毁过程还在吗?
  • 为什么管理员必须编辑员工的密码并且员工必须立即退出?显然,如果员工已登录,他们有权在那里,因此他们的密码是否更改并不重要 - 只有当他们登录(或尝试)再次登录时才重要。这种逻辑需要大量开销 - 正如 Karlo 指出的那样,每当用户在网站上执行某项操作时,都要检查密码是否已更改。如果您想阻止用户再次登录,只需建立一个禁止/取消禁止系统...
  • #alex :一旦用户注销,这将没有问题。我需要如果我删除了一名员工,我将去更改密码或通过 html 使他们的状态无效。我需要如果我改变高于任何人,我需要破坏他们的会话。这怎么可能?
  • 尝试创建一个检查密码更改的 ajax 函数。这是按时间间隔设置的。然后根据更改销毁会话并调用重定向。

标签: php codeigniter session login logout


【解决方案1】:

有一个简单的解决方案:

1 - 例如,在用户表中添加一个名为“forcelogout”的字段,它可以是一个 ENUM,有 2 个选项“Y”或“N”和默认值“N”

ALTER TABLE `users` ADD COLUMN `forcelogout` ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT 'Y: force user to logout, N: nothing to do'

2 - 更新用户密码时,将该字段值更新为“N”

3 - 在您的父控制器 (application/core/MY_Controller.php) 中,检查“forcelogout”值并注销用户(如果它是“Y”)。然后将值更新为'N'以避免循环

public function __construct()
{
    $this->do_we_need_to_logout_user();
}

private function do_we_need_to_logout_user(){
    $this->load->model('users_model');
    $user = $this->users_model->get_user($this->session->user_id);
    if ( $user[0]->forcelogout == 'Y' ){
        $user_id = $this->session->user_id;
        $this->session->sess_destroy();
        $user = array();
        $user['forcelogout'] = 'N';
        $this->users_model->update_user($user_id, $user);
        redirect('/login');
    }
}

【讨论】:

    【解决方案2】:

    管理员、经理方:他们更改员工密码。

    在员工端:每次检索员工数据时,检查密码状态是否更改。如果是这样,则销毁该员工的会话。

    再次登录成功后,将密码状态设置为空或其他。

    【讨论】:

    • 听起来开销很大
    • 我认为这是最好的方法。但是我们可以通过使用 key blaa blaa,.??? 来通过基于 db 的会话来做到这一点
    猜你喜欢
    • 2016-05-17
    • 2012-03-19
    • 2012-09-23
    • 2014-01-19
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多