原生的 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 编写了一个实现。