Это распространенный запрос или рекомендация о том, что веб-приложение не позволяет пользователю активировать более одного сеанса одновременно.Другими словами, после входа пользователя в приложение ему не должно быть разрешено открывать браузер другого типа (или использовать другой компьютер) для повторного входа в систему до завершения его первого сеанса.Если пользователь попытается снова войти в систему, срок действия приложения должен истечь.Я пытаюсь достичь этого подвига безрезультатно.Любая помощь или рекомендации будут оценены.
Кстати: мой фон 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));
}
Мой желаемый результат такой, как указано наназвание.