Собственная функциональность PHP Session отлично, но в конечном итоге это синглтон. Бывают случаи, когда вам необходимо поддерживать состояние для нескольких приложений и в рамках уже начатого сеанса (например, в рамках приложения). Технически можно остановить / перезапустить сеанс после изменения session_name()
, но это нецелесообразно / невозможно / небезопасно в большинстве приложений. Использование shared session.save_path
также не является опцией, если одно приложение хранит данные сеанса с помощью недискового адаптера.
Нет причин, чтобы функциональность в собственных сеансах не могла быть выполнена в коде пользователя, так кто-нибудь это сделал?
Обновление 1: CI_Session действительно представляет собой пользовательскую реализацию с полезным кодом, но она очень тесно связана с CodeIgniter.
Обновление 2: Вот API, который был бы замечательным:
// setup $saveHandler = new UserlandSession_SaveHandler_Files('5;/tmp'); $sess = new UserlandSession($saveHandler); $sess->name('PHPSESSID2'); $sess->gc_maxlifetime = 86400; $sess->setProxy($state); // passed by ref // usage $sess->start(); // stored string unserialized to $state $state['foo'] = 'bar'; $sess->write_close(); // $state serialized to storage
Обновление 3: Я написал реализацию для PHP5.3.
CodeIgniter имеет класс сеанса , который не использует собственные PHP-сессии.
Я написал UserlandSession в ответ на это.
Это чистая реализация PHP «сеансов», которая может использоваться для соединения сеанса между произвольными PHP-приложениями. Он не вмешивается в собственные сессии, имеет API-интерфейс OO (более похожий на PHP 5.4) и имеет API, похожий на собственные сеансы.
Он поставляется с файловыми системами и обработчиками хранения PDO и интерфейсом, чтобы упростить создание собственных.