amphp/aerys-session

该包已被弃用且不再维护。作者建议使用 amphp/http-server-session 包。

一个简化应用程序会话管理的HTTP服务器插件。轻松处理用户会话,安全地管理跨请求的数据。

v3.0.0 2023-08-20 17:32 UTC

README

AMPHP 是一套为 PHP 设计的事件驱动库集合,考虑到纤程和并发。此包提供了一个 HTTP 服务器 插件,用于简化应用程序的会话管理。轻松处理用户会话,安全地管理跨请求的数据。

安装

此包可以作为 Composer 依赖项安装。

composer require amphp/http-server-session

使用

基本用法

从会话中读取数据非常简单

$session->get('key'); // will read data stored in key 'key'

请注意,如果 key 中的数据未找到,则 get() 将返回 null

为了写入数据,会话必须先进行 lock(),以便不能从任何其他地方写入。

$session->lock();
$session->set('key', $data);
$session->commit(); // commits & unlocks

调用 commit() 将将数据存储在会话存储中,并解锁会话。

Session 类的其他重要方法包括

// regenerate the client id
$session->regenerate();

// force read from storage
$session->read();

// rollback what is `set()` in the session but has not been commit()ed yet
$session->rollback();

// destroy the session
$session->destroy();

使用中间件在 RequestHandler 中访问 Session

由于此包是 amphp/http-server 的插件,因此有一个中间件实现可用,该实现将 Session 实例注入到 Request 的属性中。当使用中间件时,会话可以通过属性访问。

use Amp\Http\Server\Request;
use Amp\Http\Server\RequestHandler;
use Amp\Http\Server\Response;
use Amp\Http\Server\Session\Session;

class SomeRequestHandler implements RequestHandler
{
    public function handleRequest(Request $request): Response
    {
        /** @var Session $session */
        $session = $request->getAttribute(Session::class);

        // any operations on the session

        // return the response
    }
}

请注意,如果未注册属性 Session::class,则 getAttribute 将引发 MissingAttributeError

中间件将处理请求/响应中的会话 cookie 的设置和读取,以及请求处理完毕后释放会话的所有锁。

如果您还没有在 amphp/http-server 中使用中间件,请遵循 使用 amphp/http-server 中间件的说明

这里提供了一个简单的示例 examples/simple.php

可以从构造函数进一步配置 SessionMiddleware,涉及四个不同的方面

  • SessionFactory
  • CookieAttributes
  • Cookie 名称(默认:'session'
  • 请求属性(默认:Session::class

CookieAttributes 用于配置不同的 cookie 属性,例如过期时间或域名

$cookieAttributes = CookieAttributes::default()
    ->withDomain('amphp.org')
    ->withExpiry(new \DateTime('+30 min'))
    ->withSecure();

使用工厂创建 Session 实例

内部会话与 3 个依赖项一起工作

可以使用提供的SessionFactory轻松创建Session实例。

/** @var \Amp\Http\Server\Session\SessionFactory $factory */
$session = $factory->create($clientId);

此库包含两种存储实现

  • LocalSessionStorage - 默认
  • RedisSessionStorage - 存储在Redis中

以及一个会话ID生成器

  • Base64UrlSessionIdGenerator

SessionFactory的构造函数允许配置工厂以使用其他实现,因此后续对create()的调用将使用新的注入实现。这在某些场景中很有用,包括测试。

贡献

请阅读我们的规则,了解我们的行为准则和向我们提交拉取请求的过程。

安全

如果您发现任何与安全相关的问题,请使用私人安全问题报告者,而不是使用公共问题跟踪器。

许可

MIT许可(MIT)。有关更多信息,请参阅LICENSE