daidesarano / embryo-session
PSR-15 中间件,用于使用 PSR-7 请求创建 PHP 会话。
1.0.0
2021-04-28 08:55 UTC
Requires
- php: >=7.1
- davidecesarano/embryo-emitter: dev-master
- davidecesarano/embryo-http: dev-master
- davidecesarano/embryo-middleware: dev-master
Requires (Dev)
- phpstan/phpstan: ^0.12.43
This package is auto-updated.
Last update: 2024-09-28 16:46:37 UTC
README
中间件,用于使用请求数据启动 PHP 会话,并在返回响应后关闭会话。
要求
- PHP >= 7.1
- PSR-7 http 消息实现和 PSR-17 http 工厂实现(例如 Embryo-Http)
- PSR-15 http 服务器请求实现(例如 Embryo-Middleware)
安装
使用 Composer
$ composer require davidecesarano/embryo-session
用法
创建一个用于设置会话项的中间件
class TestSetSessionMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $session = $request->getAttribute('session'); $session->set('name', 'World'); $response = $handler->handle($request); return $response->write('Hello '.$session->get('name').'</p><p><a href="test.php">Other Page</a></p>'); } }
创建另一个用于获取会话项的中间件
class TestGetSessionMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $session = $request->getAttribute('session'); $response = $handler->handle($request); return $response->write('Hello '.$session->get('name').'</p>'); } }
将中间件添加到分发器
$session = new Session; $middleware = new RequestHandler; $middleware->add( (new SessionMiddleware) ->setSession($session) ->setOptions([ 'use_cookies' => false, 'use_only_cookies' => true ]) ); $middleware->add(TestSetSessionMiddleware::class); $middleware->add(TestGetSessionMiddleware::class); $response = $middleware->dispatch($request, $response);
选项
setName(string $name)
会话名称。如果没有提供,则使用 PHP 的默认值。
seOptions(array $options = [])
传递给 session_start()
的选项数组。
setSessionRequestAttribute(string $name)
会话请求属性。如果没有提供,则使用 $request->getAttribute('session')
。
集合
检索数据
您可以从会话中检索项,并且也可以将默认值作为 get
方法的第二个参数传递
$session->get('key', 'default');
检索所有会话数据
如果您想检索会话中的所有数据,可以使用 all
方法
$session->all();
确定会话中是否存在项
要确定会话中是否存在项,可以使用 has
方法。如果项存在且不是 null
,则 has
方法返回 true
if ($session->has('key')) { //... }
存储数据
可以使用 set
方法将新值设置到会话中
$session->set('name', 'value');
Flash 数据
您可以使用 flash
方法将项存储在会话中,仅用于下一个请求
$session->flash('name', 'value');
删除数据
remove
方法将从会话中删除数据项。如果您想从会话中删除所有数据,可以使用 clear
方法
$session->remove('name'); $session->clear();