如何防止codeigniter中的多次登录

mzmfm0qo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(333)

我想防止我的用户进行多次登录,一旦用户登录,如果同一用户名登录他们会提示“帐户已经登录到其他设备”
我的登录控制器

public function login()
{

    $this->logged_in();

    $this->form_validation->set_rules('email', 'Email', 'required');
  $this->form_validation->set_rules('password', 'Password', 'required');

    if ($this->form_validation->run() == TRUE) {
        // true case
        $email_exists = $this->model_auth->check_email($this->input->post('email'));

        if($email_exists == TRUE) {
            $login = $this->model_auth->login($this->input->post('email'), $this->input->post('password'));

            if($login) {

                $logged_in_sess = array(
                    'id' => $login['id'],
                    'username'  => $login['username'],
                    'email'     => $login['email'],
                    'logged_in' => TRUE
                );

                $this->session->set_userdata($logged_in_sess);
                redirect('dashboard/', 'refresh');
            }
            else {
                $this->data['errors'] = '<b>Signin account failed</b>';
                $this->load->view('login', $this->data);
            }
        }
        else {
            $this->data['errors'] = '<b>Signin account failed</b>';
            $this->load->view('login', $this->data);
        }   
    }
    else {
        // false case
        $this->load->view('login');
    }   
}

我有一个名为“ci\u session”的表,以便将会话存储在数据库中。
希望有人能帮我。谢谢。

yx2lnoni

yx2lnoni1#

最好的方法是使用会话和cookies跟踪已经登录的用户。
每当新用户尝试登录时,请验证该特定用户是否正在进行任何活动会话。如果活动会话已打开,则需要使用用户的当前cookie检查会话数据库中的cookie。如果不存在cookie,则表示该用户的新登录。如果存在cookie并且与用户提供的cookie匹配,则表示活动会话。如果cookie不匹配,则用户正试图从另一个源登录。最后,如果是新的登录,那么在用户的系统和会话数据库中创建并存储一个cookie。
希望这会有所帮助

相关问题