Проблемы сессии в 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 работают как часы.
По крайней мере, пока =)

Проблемы сессии в CodeIgniter: 3 комментария

  1. Анатолий

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

Комментарии запрещены.