Вроде бы всё хорошо! Вроде CodeIgniter имеет довольно грамотную документацию, благодаря чему использование любой библиотеки не вызывает никаких трудностей. В том числе и библиотека Session, по которой подробно можно почитать (по-русски) или (по-английски).
Однако при использовании библиотеки у меня возникли проблемы. Началось всё с того, что я прикрутил xajax, который мог довольно часто обращаться к серверу.
Так вот, при слишком частом обращении к серверу у меня терялась сессия. Сначала я винил в этом AJAX, но потом я обнаружил, что сессия может теряться и без него, просто при очень частом обновлении страницы по F5.
Оказывается проблема довольно старая и проявляется не только у меня.
Подробно вопрос раскрыт . Одна из главных проблем CodeIgniter в том, что он не использует родные сессии PHP, а хранит данные сессии в cookies, на стороне клиента. Это создаёт проблемы для безопасности. Кроме того сессия довольно уязвима и может самопроизвольно завершаться, как в моём случае.
Проблема решается использованием альтернативной библиотеки, коих для CodeIgniter написано довольно много, в том числе с использованием родных PHP-сессий. Мне больше всего понравилась реализация . Она имеет такой же программный интерфейс как и собственная библиотека CodeIgniter.
Мне, чтобы переключиться с использования родного класса CI Session на Session из Native session, оказалось достаточно положить файл библиотеки в папку system/application/libraries. Кроме того, оказалось что одна библиотека стартует свою PHP-сессию, пришлось просто закомментировать start_session().
Вот и всё. Все мои проблемы испарились. Сессии и AJAX работают как часы.
По крайней мере, пока =)
Посты по теме:
RSS-подписка
О! Таки починил?
Ага
CI по умолчанию поддерживает хранение сессий в БД, можно почитать в оф.док. Полагаю, что эту проблему, можно избежать таким образом. Так и безопаснее.