compwright/php-session

独立会话实现,不依赖于PHP会话模块或$_SESSION全局变量,非常适合ReactPHP应用

v3.2.1 2024-04-09 19:06 UTC

README

这是一个PHP会话实现,它是单进程安全的,与PSR-7和PSR-15兼容,并且不依赖于全局变量($_SESSION、$_COOKIE等)。

此实现模仿了内置的PHP会话库,但不是其直接替代品。此库与PHP会话库有以下不同之处

  • 需要PHP 8+
  • 完全面向对象
  • 严格模式始终开启且无法禁用
  • 不支持自动启动和自动关闭
  • 读取/写入cookie和缓存头由中间件(包含)处理
  • 处理程序实现了内置的PHP SessionHandlerInterface,但PHP SessionHandler类将不会工作,因为它依赖于PHP会话扩展
  • 通过Session对象访问会话数据,而不是通过$_SESSION

此库非常适合单进程事件循环驱动的应用程序,使用如ReactPHP等服务器。

支持的功能

安装

composer require compwright/php-session

示例

Slim框架

tests/integration/server/App

使用PHP开发服务器运行

$ composer run-script start-php

基本用法

$sessionFactory = new Compwright\PhpSession\Factory();

$manager = $sessionFactory->psr16Session(
    /**
     * @param Psr\SimpleCache\CacheInterface
     */
    $cache,

    /**
     * @param array|Compwright\PhpSession\Config
     */
    [
        'name' => 'my_app',
        'sid_length' => 48,
        'sid_bits_per_character' => 5,
    ]
);

// Start the session
$manager->id($sid); // Read $sid from request
$started = $manager->start();
if ($started === false) {
    throw new RuntimeException("The session failed to start");
}

// Read/write the current session
$session = $manager->getCurrentSession();
$session["foo"] = "bar";
unset($session["bar"]);

// Save and close the session
$ended = $manager->write_close();
if ($ended === false) {
    throw new RuntimeException("The session failed to close properly, data may have been lost");
}

许可证

MIT许可证