«Запомнить меня» Войти в CodeIgniter - PullRequest
10 голосов
/ 07 января 2009

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

Ответы [ 6 ]

33 голосов
/ 07 января 2009

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

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

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

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

Есть хорошая статья о Рекомендации по использованию файлов cookie для постоянного входа в систему , которую можно обобщить следующим образом:

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

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

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

3 голосов
/ 25 января 2009

Возможно, вы захотите пересмотреть предложение из «Наилучшей практики использования улучшенных постоянных файлов cookie для входа». Я разместил свой анализ проблемы на сайте, но суть его такова:

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

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

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

1 голос
/ 12 января 2011

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

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

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

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

0 голосов
/ 19 октября 2015

Вам нужно установить 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');
0 голосов
/ 17 марта 2012

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

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

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

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

0 голосов
/ 01 февраля 2012

Для этих целей переменные CI во всех классах могут быть доступны из собственной библиотеки:

Например:

$this->session->sess_expiration = 500000;

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

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