7

原生的 PHP Session 功能很棒,但它最终还是一个单例。有时您需要在已经启动的会话范围内(例如在应用程序框架中)维护多个应用程序的状态。从技术上讲,更改后可以停止/重新启动会话session_name(),但这在大多数应用程序中是不切实际的/不可能的/不安全的。如果一个应用程序使用非磁盘适配器存储会话数据,则使用共享session.save_path也不是一种选择。

没有理由不能在用户代码中完成本机会话中的功能,那么有人这样做了吗?

更新 1: CI_Session确实是一个包含一些有用代码的用户态实现,但它与 CodeIgniter 高度耦合。

更新 2:这是一个很棒的 AP​​I:

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

4

2 回答 2

2

CodeIgniter 有一个不使用原生 PHP 会话的会话类。

于 2011-05-19T16:15:09.883 回答
0

我写了UserlandSession作为回应。

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

它带有文件系统PDO存储处理程序以及一个使您自己编写更容易的接口。

于 2013-10-28T13:10:34.987 回答