Вопрос

Как вы реализуете это в 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');
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top