Предотвратить несколько одновременных входов в Codeigniter из разных браузеров - PullRequest
0 голосов
/ 22 июня 2019

Это распространенный запрос или рекомендация о том, что веб-приложение не позволяет пользователю активировать более одного сеанса одновременно.Другими словами, после входа пользователя в приложение ему не должно быть разрешено открывать браузер другого типа (или использовать другой компьютер) для повторного входа в систему до завершения его первого сеанса.Если пользователь попытается снова войти в систему, срок действия приложения должен истечь.Я пытаюсь достичь этого подвига безрезультатно.Любая помощь или рекомендации будут оценены.

Кстати: мой фон PHP Codeigniter не сплошной.

Я попытался использовать учебник отсюда

https://blog.lucideus.com/2018/03/prevent-multiple-concurrent-logins-in.html

предлагает разрешение, нопри попытке получить ошибку HTTP 500

Мой контроллер:

function validate_login() {
    $email = $this->input->post('email');
    $password = $this->input->post('password');
    $credential = array('email' => $email, 'password' => 
sha1($password));

  // Checking login credential for staff
    $query = $this->db->get_where('staff', $credential);
    if ($query->num_rows() > 0) {
        $row = $query->row();
        $this->session->set_userdata('staff_login', '1');
        $this->session->set_userdata('login_user_id', $row- 
>staff_id);
        $this->session->set_userdata('name', $row->name);
        $this->session->set_userdata('login_type', 'staff');
        redirect(site_url('staff/dashboard'), 'refresh');
    }

    $clientstatus['status'] =NULL;
    $credentialandstatus = array_merge($credential,$clientstatus);
    // Checking login credential for client
    $query = $this->db->get_where('client', $credentialandstatus);
    if ($query->num_rows() > 0) {
        $row = $query->row();
        $this->session->set_userdata('client_login', '1');
        $this->session->set_userdata('login_user_id', $row- 
 >client_id);

        //custom code for preventing multiple concurrent logins
        $sessionData = $this->session->all_userdata();
        $client_id = $sessionData['client_id']; 
        $sessionId=session_id();
        $this->crud_model->setSession($client_id, $sessionId);

        //ends

        $this->session->set_userdata('name', $row->name);
        $this->session->set_userdata('login_type', 'client');
        $client_fund = $this->crud_model->get_fund($row- 
>client_id);
        $this->session->set_userdata('fund', $client_fund);

        redirect(site_url('client/dashboard'), 'refresh');
    }
    $this->session->set_flashdata('login_error', 
 get_phrase('invalid_login'));
    redirect(site_url('login'), 'refresh');
  }

Моя модель так проста:

 function setSession($client_id, $sessionId){

    //Get previous mapped session ID
    $oldSessionId = $this->db-select("session_id")- 
>where(array('client_id'=>$client_id))->get("client")- 
>row('session_id');

 //Destroy session which was mapped to previous user
    $this->db-where('id',array('id'=>$oldSessionId));
    $this->db->delete('ci_sessions', $sessionData);


   //Map new session ID to the new user
    $this->db->where('client_id', $client_id);
    $this->db->update('client', array('session_id'=>$session_id));


   }

Мой желаемый результат такой, как указано наназвание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...