有没有人在用户代码中创建类似PHP会话的类(非本机)?

时间:2011-05-19 16:03:05

标签: php session session-state userland

本机PHP会话功能很棒,但它最终是一个单例。有时您需要维护多个应用程序的状态以及已启动会话的范围(例如,在应用程序框架中)。从技术上讲,人们可以在更改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: I've written an implementation for PHP5.3。

2 个答案:

答案 0 :(得分:2)

CodeIgniter有session class,它不使用本机PHP会话。

答案 1 :(得分:0)

我写了UserlandSession来回应这个。

它是“会话”的纯PHP实现,可用于桥接任意PHP应用程序之间的会话。它不会干扰本机会话,具有OO存储API(更像PHP 5.4),并且具有类似于本机会话的API。

它附带filesystemPDO存储处理程序以及一个可以更轻松编写自己的界面。