如何防止在codeigniter中多次登录

时间:2018-06-04 07:15:43

标签: php mysql codeigniter codeigniter-3

我想阻止我的用户进行多次登录,一旦用户登录,如果用户名相同,则提示“帐户已登录其他设备。”

我的登录控制器

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_session”的表格,以便我将会话存储在我的数据库中。

希望有人在这里帮助我。感谢。

1 个答案:

答案 0 :(得分:1)

最好的方法是使用会话和Cookie跟踪已登录的用户。

每当新用户尝试登录时,请验证该特定用户是否正在进行任何活动会话。如果启用了活动会话,则需要使用用户的当前cookie检查会话DB中的cookie。如果不存在cookie,则表示其为用户重新登录。如果存在cookie并且与用户呈现的cookie匹配,则表示活动会话。如果cookie不匹配,则用户尝试从其他来源登录。最后,如果它是新登录,请在用户的系统和会话数据库中创建并存储cookie。

希望这会有所帮助