Codeigniter – Завершение сеанса и функция «запомнить меня»

Я создаю функцию «Запомнить меня» в Codeigniter, обычно я вижу, что библиотеки / проекты устанавливают cookie на пользователя с помощью токена, этот токен сохраняется в базе данных и сравнивается каждый раз, когда пользователь обращается к веб-сайту.

В Codeigniter мы можем установить время окончания сеанса, но это заставило меня попробовать другой подход, вот что я сделал:

  • Я установил session_expiration в config равным 0 (бесконечный сеанс)
  • Если пользователь отключил «Запомнить меня», я установил 2 часа времени в сеансе, а сеанс уничтожит при закрытии окна.

Поэтому мой код входа выглядит следующим образом:

if (!$this->input->post('remember_me')) { $this->session->sess_expiration = 7200; $this->session->sess_expire_on_close = TRUE; } $this->session->set_userdata($session_data); 

И мой файл конфигурации:

 $config['sess_expiration'] = 0; $config['sess_expire_on_close'] = FALSE; 

Я не вижу людей, использующих это решение для проектов, я тестировал это, и, похоже, он работает нормально.

Итак, по моему вопросу, вы бы сказали, что это безопасная практика? О безопасности, о которой я должен знать? Любой вход на этом решении vs cookie + токен базы данных будет отличным.

Solutions Collecting From Web of "Codeigniter – Завершение сеанса и функция «запомнить меня»"

Самое простое решение, которое я нашел для этой проблемы, – это просто изменить файл cookie, созданный Codeigniter таким образом:

  $this->session->set_userdata('user', $user); // a cookie has been created if($this->input->post('remember_me')) { $this->load->helper('cookie'); $cookie = $this->input->cookie('ci_session'); // we get the cookie $this->input->set_cookie('ci_session', $cookie, '35580000'); // and add one year to it's expiration } 

Также это можно сделать путем редактирования / расширения системной библиотеки сеансов.

Во-первых: установите время истечения срока действия сеанса в файле конфигурации. Второе: в функции входа пользователя добавить помнить меня,

  if($remember) { $data['new_expiration'] = 60*60*24*30;//30 days $this->session->sess_expiration = $data['new_expiration']; } $this->session->set_userdata($data); 

В-третьих: Редактирование системной библиотеки сеансов [я не уверен, будет ли продолжен сеанс работы работать или нет] Перейти к этой строке в sess_read()

 if (($session['last_activity'] + $this->sess_expiration) < $this->now) 

Перед этой строкой добавьте следующий код

 if(isset($session['new_expiration'])){ $this->sess_expiration = $session['new_expiration']; } 

Это отлично работает для меня.

Я не могу сказать, что это неправильно, но я могу сказать вам, как это сделать:

Сначала я установил, что сеанс истекает в браузере, когда он работает с временем безотказной работы 7200.

Затем:

  1. Вход в систему устанавливает пользовательские данные сеанса

  2. «Запомнить меня» устанавливает отдельный файл cookie (я храню зашифрованный хэш, содержащий адрес электронной почты пользователя + пароль + id, т. Е.: Md5 (pass + email + id))

Каждый раз, когда пользователь загружает страницу, я управляю, если существует помнить, что cookie существует, если существует, я создаю сеанс пользователя.

Единственное, что я знаю, это сеанс, который использует ключ шифрования, вредоносному злоумышленнику потребуется время для дешифрования, поэтому чем меньше ключ сеанса, тем меньше времени у злоумышленника для дешифрования текущего ключа.

Я всегда избегаю сеанса, чтобы не истекать, поэтому Запомнить меня, всегда что-то не очень хорошо для безопасности, я думаю, но в любом случае пользователь может выбрать или нет, если использовать эту функцию;)