"Запомнить меня Войти в CodeIgniter

Как вы реализуете это в CodeIgniter?

Ответ 1

(Этот ответ был ответом на исходный вопрос)

Как вы это сделаете? Или, как бы вы создаете сеанс с более длинным срок годности, чем другие?

Все созданные сеансы будут использовать такой же $config ['sess_expiration'] в config файл (по умолчанию: 7200 секунд), есть способ передать пользовательское значение

Продление срока действия cookie сеанса не будет работать для функции "запомнить меня", так как пользователь потеряет свой файл cookie сеанса, когда он закроет браузер. Если Code Igniter не имеет встроенной функции "помнить", тогда вам нужно будет написать что-то, чтобы отбросить файл cookie на длительный срок, содержащий информацию, которая позволит автоматически вводить пароль, когда сервер увидит его снова.

Там хорошая статья о Persistent Login Cookie Best Practice, которая может быть скомпонована как:

  • Когда пользователь успешно войдет в систему с помощью Запомнить меня, войдите в систему cookie выдается в дополнение к стандартный файл cookie управления сеансом. 2
  • Файл cookie для входа содержит имя пользователя пользователя и случайное число ( "токен" отсюда) от достаточно большое пространство. Имя пользователя и токен хранится как пара в таблица базы данных.
  • Когда пользователь, не зарегистрированный пользователем, посещает сайт и представляет файл cookie для входа, имя пользователя и токен просматриваются в базе данных.      1. Если пара присутствует, пользователь считается аутентифицированным. Используемый токен удаляется из база данных. Создается новый токен, хранятся в базе данных с именем пользователя, и выдается пользователю через новый логин печенье.      2. Если пара отсутствует, файл cookie для входа игнорируется.
  • Пользователи, прошедшие проверку подлинности только через этот механизм, не допускается доступ к определенным защищенная информация или функции таких как смена пароля, просмотр личная идентификация информации или тратить деньги. Чтобы выполнить эти операции, пользователь должен сначала успешно подать нормальный имя пользователя/пароль.
  • Поскольку этот подход позволяет пользователю иметь несколько запомненных логины из разных браузеров или компьютеров, предусмотрен механизм пользователь должен стереть все запомненные logins за одну операцию.

Еще одна статья, которая повышает безопасность этих идей в Улучшенная передовая практика cookie для постоянных пользователей

Если вы будете следовать практике в этих статьях, вы не ошибетесь!

Ответ 2

Возможно, вам захочется пересмотреть предложение "Улучшенная постоянная версия cookie для входа в систему". Я опубликовал свой анализ проблемы на сайте, но суть в этом:

Вы не можете предотвратить кражу файлов cookie без безопасной строки, независимо от того, что

(* "безопасной линией", я имею в виду SSL/VPN-туннелирование/шифрование с открытым ключом - или надежная схема ответа на запрос)

Я все использую передовые методы перехвата, но там, где не будет никакой хитрости, и где путь только - это SSL.

Ответ 3

Спасибо за решение. Я реализовал это в своем проекте CI.

DEV Примечание: файл cookie должен иметь защищенный хэш в качестве ключа запоминания. - не просто хранить идентификатор пользователя) - не храните пароль, - и не храните хеш пароля. Таким образом, люди не могут автоматически войти в учетную запись.

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

Надеюсь, что это поможет. Крис Д. - из Австралии:)

Ответ 4

Для этих вещей переменные CI во всех классах можно получить через свою собственную библиотеку:

Например:

$this->session->sess_expiration = 500000;

Надеюсь, что решить вашу проблему.

Ответ 5

есть библиотека на github, чтобы запомнить ее скачать.

Используя эту библиотеку setCookie(), происходит следующее:

1. Генерируется файл cookie, содержащий уникальный номер Этот номер записывается в таблицу базы данных, называемую ci_cookies вместе с netid/username, переданным в setCookie()

2.Когда функция verifyCookie() называется хэшем cookie браузера, он должен соответствовать хешу, записанной в базу данных. Если это так, verifyCookie() возвращает true на главную страницу

Ответ 6

U нужно установить conf перед сеансом загрузки

$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
   $this->config->set_item('sess_expiration', 0);
   $this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');