Я работаю над приложением codeigniter 3, и я недавно реализовал средство проверки сеанса, которое удаляет сеанс пользователя, если он уже вошел в систему. Теперь мы хотим, чтобы всплывающее окно появлялось, если пользователь уже вошел в систему с другим сеансом . Я могу вызвать всплывающее модальное окно с помощью кнопки, но я хочу внедрить его в исходный поток системы входа в систему. Поскольку это форма входа, вы сразу попадете в систему проверки входа. Теперь это форма входа в систему:
<form action="<?php echo site_url('login/validate_login/user'); ?>" method="post">
<div class="content-box">
<div class="basic-group">
<div class="form-group">
<label for="login-email"><span class="input-field-icon"><i class="fas fa-envelope"></i></span> <?php echo get_phrase('email'); ?>:</label>
<input type="email" class="form-control" name = "email" id="login-email" placeholder="<?php echo get_phrase('email'); ?>" value="" required>
</div>
<div class="form-group">
<label for="login-password"><span class="input-field-icon"><i class="fas fa-lock"></i></span> <?php echo get_phrase('password'); ?>:</label>
<input type="password" class="form-control" name = "password" placeholder="<?php echo get_phrase('password'); ?>" value="" required>
</div>
</div>
</div>
<div class="content-update-box">
<button type="submit" class="btn"><?php echo get_phrase('login'); ?></button>
</div>
<!-- Modal -->
<div class="modal fade" id="login" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">You are already logged in</h4>
</div>
<div class="modal-body">
<p>You are currently logged in on a different session on the site. Please note that if you continue, the existing session will be terminated. Please change your password if you suspect that your account has been conpromised.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel Login</button>
<button type="submit" class="btn"><?php echo get_phrase('login'); ?></button>
</div>
</div>
</div>
</div>
<div class="forgot-pass text-center">
<span><?php echo get_phrase('or'); ?></span>
<a href="javascript::" onclick="toggoleForm('forgot_password')"><?php echo get_phrase('forgot_password'); ?></a>
</div>
<div class="account-have text-center">
<?php echo get_phrase('do_not_have_an_account'); ?>? <a href="javascript::" onclick="toggoleForm('registration')"><?php echo get_phrase('sign_up'); ?></a>
</div>
</form>
Кнопка в данный момент переходит прямо к этой функции входа:
public function validate_login($from = "") {
$email = $this->input->post('email');
$password = $this->input->post('password');
$credential = array('email' => $email, 'password' => sha1($password), 'status' => 1);
// Checking login credential for admin
$query = $this->db->get_where('users', $credential);
if ($query->num_rows() > 0) {
$row = $query->row();
$this->session->set_userdata('user_id', $row->id);
$this->session->set_userdata('role_id', $row->role_id);
$this->session->set_userdata('role', get_user_role('user_role', $row->id));
$this->session->set_userdata('name', $row->first_name.' '.$row->last_name);
$this->delete_session_user_id();
$this->session->set_flashdata('flash_message', get_phrase('welcome').' '.$row->first_name.' '.$row->last_name);
if ($row->role_id == 1) {
$this->session->set_userdata('admin_login', '1');
redirect(site_url('admin/dashboard'), 'refresh');
}else if($row->role_id == 2){
$this->session->set_userdata('user_login', '1');
$this->set_session_user_id();
redirect(site_url('home/my_courses'), 'refresh');
}
}else {
$this->session->set_flashdata('error_message',get_phrase('invalid_login_credentials'));
redirect(site_url('home/login'), 'refresh');
}
}
Я создал эту функцию для извлечения идентификатора пользователя из электронных писем:
public function get_user_id($user_email = "") {
$this->db->select('id');
$this->db->where('email', $user_email);
$user_id=$this->db->get('users');
return $user_id;
}
Эта функция может получить идентификатор пользователя на основе предоставленного адреса электронной почты.
Затем я использую эту функцию, чтобы проверить, есть ли сеанс, и вернуть false if есть 0 результатов и true , если есть сеанс с этим идентификатором пользователя. Так что, если это ложь, они должны иметь возможность войти в систему, а модальное всплывающее окно не должно открываться, но если это правда, оно должно открыться.
public function user_has_session($user_id=''){
$this->db->where('user_id',$user_id);
$this->db->from('ci_sessions');
$total=$this->db->count_all_results();
if($total<0)
return false;
else
return true;
}
Я думаю, что это лучший подход без необходимости повторять весь вход в систему течь. Возможно, кто-то может посоветовать, лучший ли это подход или мне действительно нужно изменить весь поток.
Спасибо
Вот моя предыдущая проблема, на которую я сам ответил
ОБНОВЛЕНИЕ Добавлено, чтобы прояснить мою проблему
Ну, проблема в том, что при попытке входа в систему с другого устройства он должен выйти из другого активного сеанса. Поэтому, если вы вошли в систему на моем рабочем столе в новом браузере или даже на моем телефоне с тем же идентификатором пользователя, активный сеанс должен завершиться, в данный момент он делает это без предупреждения пользователя. Поэтому я хочу, чтобы модальное всплывающее окно предупреждало пользователя о том, что в данный момент существует активный сеанс с этим идентификатором пользователя