daidesarano/embryo-session

PSR-15 中间件,用于使用 PSR-7 请求创建 PHP 会话。

1.0.0 2021-04-28 08:55 UTC

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();