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

发布于 2024-11-08 04:30:42 字数 1082 浏览 0 评论 0原文

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

The native PHP Session functionality is great, but it's ultimately a singleton. There are times when you need to maintain state for multiple apps and in the scope of an already-started session (e.g. in an app framework). Technically one can stop/restart a session after changing session_name(), but this is impractical/impossible/unsafe within most apps. Using a shared session.save_path is also not an option if one app stores session data with a non-disk adapter.

There's no reason the functionality in native sessions can't be done in user code, so has anyone done this?

Update 1: CI_Session is indeed a userland implementation with some useful code, but it's highly coupled to CodeIgniter.

Update 2: Here's an API that would be great:

// 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

Update 3: I've written an implementation for PHP5.3.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绻影浮沉 2024-11-15 04:30:42

CodeIgniter 有一个不使用本机 PHP 会话的 会话类

CodeIgniter has a session class that does not utilize native PHP sessions.

请止步禁区 2024-11-15 04:30:42

我写了 UserlandSession 来回应这一点。

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

它带有 文件系统PDO 存储处理程序和接口,使您可以更轻松地编写自己的处理程序。

I wrote UserlandSession in response to this.

It's a pure PHP implementation of "sessions" that can be used to bridge a session between arbitrary PHP apps. It does not interfere with native sessions, has an OO storage API (more like PHP 5.4), and has an API similar to native sessions.

It comes with filesystem and PDO storage handlers and an interface to make it easier to write your own.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文