spaze / mysql-session-handler
带有可选加密存储的 MySQL 会话处理程序,适用于 Nette 框架
v3.0.0
2024-01-19 23:47 UTC
Requires
- php: ^8.2
- nette/database: ^3.1
- nette/di: ^3.0
- nette/utils: ^3.2|^4.0
Requires (Dev)
- nette/schema: ^1.2
- php-parallel-lint/php-console-highlighter: ^1.0
- php-parallel-lint/php-parallel-lint: ^1.3
- phpstan/phpstan: ^1.9
- phpstan/phpstan-nette: ^1.0
- spaze/coding-standard: ^1.3
- spaze/encryption: ^2.0
Suggests
- spaze/encryption: Adds a support for encrypted session storage
README
为 Nette 框架 定制的 PHP 会话处理程序,使用 MySQL 数据库进行存储。
需求
- nette/database 3.1+
- nette/di 3.0+
- nette/utils 3.2+
- PHP 8.1+
旧版本需求
2.2 版本需求
- nette/database 3.1+
- nette/di 3.0+
- nette/utils 3.2+
- PHP 7.4+
2.1 版本需求(不再支持)
- nette/database 2.4+
- nette/di 2.4+
- nette/utils 2.4+
- PHP 7.2+
安装
安装 spaze/mysql-session-handler 的首选方法是使用 Composer
$ composer require spaze/mysql-session-handler
设置
安装后
-
使用 SQL 在 sql/create.sql 中创建 sessions 表。
-
在 config.neon 中注册扩展
extensions: sessionHandler: Spaze\Session\DI\MysqlSessionHandlerExtension
功能
- 出于安全原因,会话 ID 以 SHA-256 哈希的形式存储在数据库中。
- 支持通过 spaze/encryption 加密会话存储,该加密使用 paragonie/halite,后者使用 Sodium。
- 事件,允许您向会话存储表添加额外的列,例如。
- 多主复制友好(已在 Master-Master 基于行的复制设置中进行测试)。
加密会话存储
请参考 spaze/encryption 中的指南来定义新的加密密钥。
定义新的服务
sessionEncryption: \Spaze\Encryption\Symmetric\StaticKey('session', %encryption.keys%, %encryption.activeKeyIds%)
将新的加密服务添加到会话处理程序
sessionHandler:
encryptionService: @sessionEncryption
从未加密到加密的会话存储迁移尚不支持。
事件
onBeforeDataWrite
此事件在会话数据写入会话表之前发生,无论是新会话(插入新行)还是现有会话(更新行)。如果没有更改会话数据,则不会触发事件。
您可以在事件处理程序中调用 setAdditionalData()
添加新的列
setAdditionalData(string $key, $value): void
例如,用于存储属于会话的用户 ID。
鸣谢
本程序主要基于 MySQL Session handler,由 Pematon 的 Marián Černý 和 Peter Knut 开发,感谢!