ujjwal / psr7-http-session
PSR-7 的 PHP 原生会话处理程序的替代方案
Requires
- php: >=7.1
- paragonie/cookie: ^3.2.0
- psr/http-message: ^1.0
- roave/security-advisories: dev-master
- symfony/options-resolver: ^3.3
- zendframework/zend-math: ^3.0
Requires (Dev)
- http-interop/http-middleware: ^0.4.1
- mikey179/vfsstream: ^1.6
- mockery/mockery: ^0.9.9
- phpunit/phpunit: ^6.2
- zendframework/zend-stratigility: ^2.0
Suggests
- http-interop/http-middleware: To use interop based single pass session middleware for automatically starting session and writing to cookie
- zendframework/zend-stratigility: To use double pass session middleware for automatically starting session and writing to cookie
This package is auto-updated.
Last update: 2024-09-13 14:37:09 UTC
README
PHP 原生会话处理程序的替代方案。它不依赖于 PHP 的会话功能。它可以与像 react/http 这样的非典型基于 PHP 的应用程序一起使用。
但是,为什么?
- 您不必依赖于
session_
函数,这意味着您可以编写可测试的代码。 - 您不必依赖于
$_SESSION
超全局变量,这使得您可以编写更可测试的代码。 - 您甚至可以使用它来处理非典型基于 PHP 的应用程序,如与 react/http 一起。
- 您可以使用 psr-7 HTTP 消息接口和此会话库创建一个框架无关的库/模块。
入门
$sessionOptions = [ 'name' => 'session_id', 'sid_length' => 40, 'cookie' => [ 'domain' => 'your-app.com', ] ]; $sessionHandler = new Ojhaujjwal\Session\Handler\FileHandler('path/to/session-data'); $sessionManager = new Ojhaujjwal\Session\SessionManager( $sessionHandler, $request, $sessionOptions ); $storage = $sessionManager->getStorage(); $sessionManager->start(); // you can manipulate $storage just like $_SESSION $storage['some_key'] = 'some_value'; $someKey = $storage['some_key']; $response = $sessionManager->close($response); //return the response the the client
安装
composer require ujjwal/psr7-http-session
会话选项
name
类型:字符串 必需:是
用于作为 cookie 名称的会话名称。它应仅包含字母数字字符。
sid_length
类型:整数 默认:40
会话 ID 字符串的长度。会话 ID 长度可以是 22 到 256 之间。
cookie
类型:数组
用于传递 cookie 选项。请参阅 cookie 选项部分。
Cookie 选项
domain
类型:字符串 默认:从请求的 Host
标头派生
要在会话 cookie 中设置的域。
path
类型:字符串 默认:/
要在会话 cookie 中设置的路径。
http_only
类型:布尔值 默认:true
将 cookie 标记为仅通过 HTTP 协议访问。这意味着 cookie 不会通过脚本语言(如 JavaScript)访问。
secure_only
类型:布尔值 默认:如果原始请求是 https 则为 True
它表示是否应仅通过安全连接发送 cookie。
lifetime
类型:整数 默认:0
(会话 cookie)
它指定发送到浏览器的 cookie 的有效期(以秒为单位)。值 0 表示“直到浏览器关闭”。默认为 0
same_site
类型:字符串 默认:Lax
指定 SameSite
cookie 属性。非常有用,可以通过防止浏览器在跨站请求中发送此 cookie 来减轻 CSRF。允许的值
- 空字符串表示不设置该属性
ParagonIE\Cookie\Cookie::SAME_SITE_RESTRICTION_LAX
(相当严格)ParagonIE\Cookie\Cookie::SAME_SITE_RESTRICTION_STRICT
(非常严格)
基本操作
初始化 SessionManager
$sessionManager = new Ojhaujjwal\Session\SessionManager( $sessionHandler, $request, $sessionOptions );
启动会话
$sessionManager->start(); $sessionManager->isStarted(); // returns true
检索会话 ID
$sessionManager->getId(); //returns alphanumeric string
重新生成会话 ID
$sessionManager->regenerate(); $sessionManager->regenerate(false); // does not destroy old session
关闭会话并将其写入响应头作为 cookie
$response = $sessionManager->close($response);
检索会话存储
$storage = $sessionManager->getStorage();
它实现了 IteratorAggregate
、ArrayAccess
、Countable
。因此,它将非常类似于 $_SESSION
。只需将应用程序中的 $_SESSION
出现替换为对象的实例即可。
写入会话
$storage->abcd = 'efgh'; //or $storage['abcd'] = 'efgh'; //or $storage->set('abcd', 'efgh');
从会话中读取
$abcd = $storage->abc; //or $abcd = $storage['abcd']; //or $abcd = $storage->get('abcd');
从会话中删除
unset($storage->abc); //or unset($storage['abcd']); //or $storage->remove('abcd');
刷新会话数据
$storage->flush();
会话中间件
它还附带一个 http 中间件,您可以使用它来自动初始化会话并将 cookie 写入响应。中间件与基于 http-interop/http-middleware
的单次遍历方法或类似 express 的双次遍历方法兼容。
$middleware = new Ojhaujjwal\Session\SessionMiddleware($handler, $sessionOptions); $middleware->process($request, $delegate); // or $middleware($request, $response, $next); //using with zend-expressive //after errorhandler and before the routing middleware $app->pipe(\Ojhaujjwal\Session\SessionMiddleware::class);
待办事项
- 修复 php7.2 中的构建
- 垃圾收集
- 基于Cookie的会话处理器
- 加密会话处理器