compwright / php-session
独立会话实现,不依赖于PHP会话模块或$_SESSION全局变量,非常适合ReactPHP应用
资助包维护!
compwright
Buymeacoffee.com
v3.2.1
2024-04-09 19:06 UTC
Requires
- php: ^8.0 || ^8.1 || ^8.2
- dflydev/fig-cookies: ^3.0
- psr/http-message: ^1 || ^2
- psr/http-server-handler: ^1
- psr/http-server-middleware: ^1
- psr/simple-cache: ^1 || ^2 || ^3
Requires (Dev)
- behat/behat: ^3.13
- bramus/monolog-colored-line-formatter: ^3.0
- friendsofphp/php-cs-fixer: ^3.11
- kodus/file-cache: ^2
- league/flysystem: ^3.12
- matthiasmullie/scrapbook: ^1.4
- middlewares/access-log: ^2.0
- monolog/monolog: ^3.2
- php-di/php-di: ^7.0
- phpstan/phpstan: ^1.8
- phpunit/phpunit: ^10.5
- psr/log: ^2 || ^3
- slim/psr7: ^1.6
- slim/slim: ^4.11
Suggests
- ext-redis: Redis extension for PHP
- matthiasmullie/scrapbook: Scrapbook Cache provides excellent session storage options
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"); }