Проблемы сессии в CodeIgniter



CodeIgniter хранит данные сессии в cookies на стороне клиента Вроде бы всё хорошо! Вроде CodeIgniter имеет довольно грамотную документацию, благодаря чему использование любой библиотеки не вызывает никаких трудностей. В том числе и библиотека Session, по которой подробно можно почитать здесь(по-русски) или здесь (по-английски).

Однако при использовании библиотеки у меня возникли проблемы. Началось всё с того, что я прикрутил xajax, который мог довольно часто обращаться к серверу.

Так вот, при слишком частом обращении к серверу у меня терялась сессия. Сначала я винил в этом AJAX, но потом я обнаружил, что сессия может теряться и без него, просто при очень частом обновлении страницы по F5.

Оказывается проблема довольно старая и проявляется не только у меня.

Подробно вопрос раскрыт тут. Одна из главных проблем CodeIgniter в том, что он не использует родные сессии PHP, а хранит данные сессии в cookies, на стороне клиента. Это создаёт проблемы для безопасности. Кроме того сессия довольно уязвима и может самопроизвольно завершаться, как в моём случае.

Проблема решается использованием альтернативной библиотеки, коих для CodeIgniter написано довольно много, в том числе с использованием родных PHP-сессий. Мне больше всего понравилась реализация Native session. Она имеет такой же программный интерфейс как и собственная библиотека CodeIgniter.

Мне, чтобы переключиться с использования родного класса CI Session на Session из Native session, оказалось достаточно положить файл библиотеки в папку system/application/libraries. Кроме того, оказалось что одна библиотека стартует свою PHP-сессию, пришлось просто закомментировать start_session().

Вот и всё. Все мои проблемы испарились. Сессии и AJAX работают как часы.
По крайней мере, пока =)

Посты по теме:

  1. ALCAPTCHA = Капча + AJAX + CodeIgniter
  2. Вышел CodeIgniter 1.7.2
  3. CMS-визитка на CodeIgniter
  4. Debug Toolbar для CodeIgniter
  5. Модули в Kohana и CodeIgniter

Категории CodeIgniter, для файлообмена |
автор: altesack / Вторник, Июль 07, 2009 / 3 комментов »

3 комментов

    О! Таки починил? :)

    Ага :)

    CI по умолчанию поддерживает хранение сессий в БД, можно почитать в оф.док. Полагаю, что эту проблему, можно избежать таким образом. Так и безопаснее.