& # 8216; Запомнить меня & # 8217; Войти в CodeIgniter
-
05-07-2019 - |
Вопрос
Как вы реализуете это в CodeIgniter?
Решение
(Этот ответ был ответом на исходный вопрос)
Как бы вы это сделали? Или как бы вы создаете сеанс с более длинным срок годности, чем другие?
Все созданные сеансы будут использовать тот же $ config ['sess_expiration'] в файл конфигурации (по умолчанию: 7200 секунд), есть ли способ передать пользовательское значение
Продление срока действия файла cookie сеанса не сработает для " запомнить меня " особенность, так как пользователь потеряет свой сеансовый cookie, когда они закроют браузер. Если у Code Igniter нет встроенной функции «запомнить», вам нужно будет написать что-нибудь, чтобы удалить долговечный файл cookie, содержащий информацию, которая позволит автоматически входить в систему, когда сервер снова его увидит.
В передовой практике использования файлов cookie для постоянного входа в систему есть хорошая статья, которая может быть обобщено как:
<Ол>Когда пользователь успешно входит в систему с пометкой «Запомнить меня», происходит вход Cookie выдается в дополнение к стандартный файл cookie управления сеансом. 2 Файл cookie для входа в систему содержит имя пользователя и случайное число («токен» с этого момента) от достаточно большое пространство Имя пользователя и токены хранятся в виде пары в таблица базы данных. Когда незарегистрированный пользователь посещает сайт и представляет файл cookie для входа, имя пользователя и токен ищутся в базе данных. 1. Если пара присутствует, пользователь считается аутентифицированным. Использованный токен удаляется из база данных. Новый токен генерируется, хранится в базе данных с именем пользователя, и выдается пользователю через новый логин печенье. 2. Если пары нет, cookie-файл для входа игнорируется. Пользователи, прошедшие аутентификацию только через этот механизм, не разрешен доступ к определенным защищенная информация или функции такие как смена пароля, просмотр личную информацию или тратить деньги. Для выполнения тех операции, пользователь должен сначала успешно отправить нормальный логин / пароль для входа в систему. Поскольку этот подход позволяет пользователю запомнить несколько логины из разных браузеров или компьютеры, механизм предусмотрен для пользователь стирает все запоминаемое вход в систему за одну операцию. Ол>
Еще одна статья, в которой повышается безопасность этих идей, в передовой практике использования улучшенных файлов cookie для постоянного входа в систему
Если вы будете следовать правилам, изложенным в этих статьях, вы не ошибетесь!
Другие советы
Возможно, вы захотите пересмотреть предложение из «Рекомендации по улучшению файлов cookie для постоянного входа». Я разместил свой анализ проблемы на сайте, но суть в следующем:
Вы не можете предотвратить кражу файлов cookie без безопасной строки, независимо от того, что
(* Под «безопасной линией» я подразумеваю туннелирование SSL / VPN / шифрование с открытым ключом - или надежную схему запроса-ответа *)
Я все за постоянные рекомендации по входу в систему, но есть момент, когда никакие хитрости не помогут, и где только путь вверх - это SSL.
Спасибо за решение. Я реализовал это в своем проекте CI.
DEV Примечание: cookie должен иметь защищенный хэш в качестве ключа запомнить меня. - не просто хранить идентификатор пользователя) - не хранить пароль, - и не храните хэш пароля. Таким образом, люди не смогут автоматически войти ни в какую учетную запись.
Сценарий наихудшего случая: как только хакер обнаружит метод хеширования, вы можете настроить функцию производителя ключа в одном месте, и вы снова настроитесь с безопасностью. Я просто отрегулировал бы строки соли и перца.
Надеюсь, это поможет. Крис Д. - из Австралии:)
Для этих целей переменные CI во всех классах могут быть доступны из собственной библиотеки:
Например:
$this->session->sess_expiration = 500000;
Надеюсь, что это решит вашу проблему.
на github есть библиотека, запомните, как я ее скачал.
Используя функцию setCookie () этой библиотеки, происходит следующее:
1.Создается cookie, содержащий уникальный номер Это число записывается в таблицу базы данных, которая называется ci_cookies, вместе с netid / username, передаваемым в setCookie ()
2.При вызове функции verifyCookie () хеш cookie браузера должен соответствовать хешу, записанному в базе данных. Если это так, verifyCookie () возвращает true, перенаправляет его на домашнюю страницу
Вам нужно установить 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');