fiberphp/session

🍪 FiberPHP 会话组件 —— 基于 Cookie+Redis 的会话管理,支持 Flash 闪存、CSRF Token、自动续期,协程安全。

Maintainers

Package info

gitee.com/fiberphp/session

pkg:composer/fiberphp/session

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

dev-master 2026-08-24 15:00 UTC

This package is auto-updated.

Last update: 2026-08-24 15:00:47 UTC


README

基于 Cookie+Redis 的会话管理,支持 Flash 闪存、CSRF Token、自动续期。

目录结构

src/
├── SessionManager.php         # 会话管理器(生命周期/数据访问/Flash/CSRF)
├── Store.php                  # 数据容器(data + newFlash + oldFlash)
├── SessionMiddleware.php      # HTTP 中间件(加载/保存/写 Cookie)
├── SessionProvider.php         # 服务提供者
├── Install.php                 # 安装器(发布配置 + 注册 Provider)
├── Contract/
│   └── DriverInterface.php     # 存储驱动契约
├── Driver/
│   ├── FileDriver.php          # 文件存储(默认)
│   └── RedisDriver.php         # Redis 存储
└── helpers.php                 # 助手函数 session()
config/
└── session.php                 # 配置文件
tests/
├── SessionTest.php             # 14 个测试用例
└── bootstrap.php

安装

composer require fiberphp/session

配置

config/session.php

return [
    'driver' => 'file',               // file | redis
    'name' => 'fiberphp_session',     // cookie name
    'lifetime' => 7200,               // 过期时间(秒)
    'encrypt' => false,               // 是否加密
    'path' => '/',
    'domain' => '',
    'secure' => false,
    'httponly' => true,
    'same_site' => 'lax',
    'file' => ['path' => runtime_path('sessions')],
    'redis' => ['connection' => 'default'],
];

快速开始

基本操作

// 写入
session()->set('user_id', 123);

// 读取
$userId = session()->get('user_id');

// 判断
session()->has('user_id');

// 删除
session()->forget('user_id');

// 清空
session()->flush();

Flash 闪存(一次性数据)

// 设置闪存(下次请求可用,之后自动消失)
session()->flash('success', '操作成功');

// 读取闪存
$message = session()->getFlash('success');

// 延长所有闪存存活
session()->reflash();

// 延长指定闪存存活
session()->keep(['success', 'error']);

CSRF Token

// 生成 Token
$token = session()->token();

// 验证 Token
if (session()->verifyToken($inputToken)) {
    // 验证通过
}

会话迁移

// 重新生成 Session ID(登录后防止固定攻击)
session()->regenerate();

中间件挂载

#[Get('/profile', middleware: [SessionMiddleware::class])]
public function profile(Request $request): Response { ... }

API

SessionManager

方法说明
set($key, $value)写入数据
get($key, $default)读取数据
has($key)是否存在
forget($key)删除
flush()清空全部
flash($key, $value)设置闪存
getFlash($key)读取闪存
reflash()延长全部闪存
keep($keys)延长指定闪存
token()生成 CSRF Token
verifyToken($token)验证 CSRF Token
regenerate($destroy)重新生成 Session ID

测试

composer install
./vendor/bin/phpunit

License

MIT