В CodeIgniter данные сеанса сохраняются в файле cookie по умолчанию. Но также должен быть файл на моем сервере (названный как идентификатор сеанса), чтобы убедиться, что данные (в cookie) действительны или я ошибаюсь?
Я ищу место, где сохраняются сеансы. Я уже просматривал каталог «session.save_path» (/ var / lib / php5), но в этом каталоге есть только другие сеансы, но не сеансы CodeIgniter.
Я также не сохраняю сеансы в базе данных, так как CodeIgniter знает, что данные (в cookie) действительны?
Утилита native codeigniter переопределяет регулярную обработку сеанса PHP и использует собственную систему обработки данных, которая является причиной того, что вы не можете найти ее в обычных местах. (также я хотел бы упомянуть, что лично я нахожу, как он реализован немного неуверенно, поскольку ВСЕ ваши данные сеанса хранятся непосредственно в cookie сеанса браузера пользователей.)
Вы можете сделать это, как предлагал Residuum, и отступать через библиотеку сессий codeigniter и находить, где он хранится, или вы можете переопределить обработку сеанса с помощью чего-то вроде OB_Session. ( http://bleakview.orgfree.com/obsession/ )
Я бы настоятельно рекомендовал установить либо OB_Session, либо что-то вроде этого, так как он будет использовать собственную обработку сеанса PHP, и он будет держать ваши файлы cookie либо A) слишком большими, либо обрушиваться на ограничение байта браузера, либо B) данные должны храниться на стороне клиента.
Наконец, в зависимости от того, что вы пытаетесь сделать, я буду следовать инструкциям руководства пользователя CI и хранить данные сеанса в базе данных. ( http://codeigniter.com/user_guide/libraries/sessions.html ) Это облегчило бы вам работать с данными и даже обновлять и расширять то, что хранится в Codeigniter. Пожалуйста, имейте в виду, что даже если вы храните его в базе данных, которую STILL необходимо изменить, например, OB_Session, поскольку ваш файл cookie по-прежнему хранит все данные даже при изменении базы данных.
Файл cookie содержит хеш-данные md5 данных сеанса и ключ шифрования файла cookie, который проверяется при загрузке данных, см. System / libraries / Session.php, function sess_read () lines 140ff:
// Decrypt the cookie data if ($this->sess_encrypt_cookie == TRUE) { $session = $this->CI->encrypt->decode($session); } else { // encryption was not used, so we need to check the md5 hash $hash = substr($session, strlen($session)-32); // get last 32 chars $session = substr($session, 0, strlen($session)-32); // Does the md5 hash match? This is to prevent manipulation of session data in userspace if ($hash !== md5($session.$this->encryption_key)) { log_message('error', 'The session cookie data did not match what was expected. This could be a possible hacking attempt.'); $this->sess_destroy(); return FALSE; } }
Это напрямую не отвечает на ваш вопрос, но я подумал, что это может быть полезно знать.
Для просмотра сеанса PHP используйте следующее.
print_r ($_SESSION);
Для просмотра сеанса CI используйте следующее.
print_r ($this->session->userdata);
Просто проверил это сегодня с Firebug ..
Чтобы следить за ответом Шани, в файле «application / config / config.php» CodeIgniter, если вы задаете:
$config['sess_use_database'] = TRUE;
то только данные сеанса CI по умолчанию: session_id, IP_address .., сохраняется как cookie браузера.
Любые дополнительные пользовательские данные, предоставляемые set_userdata()
, такие как имена пользователей и пароли, больше не являются частью файла cookie, а вместо этого хранятся в вашей базе данных.
Когда я говорю о «сеансах» ниже, я имею в виду сеансы CI, а не сеансы PHP.
Если вы используете параметр по умолчанию (который, по словам руководства, не следует использовать для конфиденциальных данных), ответ на ваш вопрос заключается в том, что он не знает. Он доверяет файлу cookie.
Чтобы использовать его в безопасном режиме, вы должны использовать параметр сеанса базы данных, а также параметр шифрования. Используя оба этих варианта, это ответ на ваш вопрос:
В файле cookie хранится только одно значение. Это значение представляет собой сериализованный и зашифрованный массив. Этот массив содержит четыре части информации.
Идентификатор сеанса – это случайная строка. Это строка, которая используется для корреляции с данными в таблице сеансов. Строка обновляется (и повторно зашифровывается) каждый запрос и обновляется в файле cookie и таблице. Если это не соответствует значению таблицы сеанса, данные таблицы недоступны и будут попадаться во встроенную сборку мусора.
При желании вы также можете обеспечить проверку IP-адресов в классе сеанса CI. Это означает, что в дополнение к случайному регенерирующему идентификатору сеанса они должны также оставаться последовательными, или сеанс будет уничтожен.
При желании вы также можете выполнить проверку UA и значение тайм-аута.
Поэтому традиционный файл сеанса никогда не записывается в папку кэша. Сеансы CI Cookie бесполезны для всех, кроме неличных данных, таких как запоминание состояний пользовательского интерфейса веб-интерфейса. Сессии базы данных CI очень гибкие. Если ваша PHP-установка включает Mcrypt, безопасность также надежна. Если у вас нет Mcrypt, они по-прежнему достаточно безопасны, но не будут проходить, например, с соблюдением PCI.
Вы можете прочитать больше в руководстве CI , но это было резюме информации, которую я считал наиболее актуальной для вашего вопроса.