Кто-нибудь создал Session-подобный класс PHP в пользовательском коде (не нативном)?
Нативная функциональность PHP Session великолепна, но в конечном итоге она одноэлементна. Есть моменты, когда вам нужно поддерживать состояние для нескольких приложений и в рамках уже запущенного сеанса (например, в структуре приложения). Технически можно остановить / перезапустить сеанс после изменения session_name()
, но это нецелесообразно / невозможно / небезопасно в большинстве приложений. Использование общего 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.
2 ответа
CodeIgniter имеет класс сеанса, который не использует родные сеансы PHP.
Я написал UserlandSession в ответ на это.
Это чисто PHP-реализация "сессий", которую можно использовать для соединения сессии между произвольными PHP-приложениями. Он не мешает собственным сеансам, имеет API хранилища OO (более похожий на PHP 5.4) и имеет API, аналогичный собственным сеансам.
Он поставляется с файловой системой и обработчиками хранилищ PDO, а также интерфейсом, облегчающим написание ваших собственных.