spaze/mysql-session-handler

带有可选加密存储的 MySQL 会话处理程序,适用于 Nette 框架

v3.0.0 2024-01-19 23:47 UTC

This package is auto-updated.

Last update: 2024-09-20 01:11:37 UTC


README

Nette 框架 定制的 PHP 会话处理程序,使用 MySQL 数据库进行存储。

需求

旧版本需求

2.2 版本需求

2.1 版本需求(不再支持)

安装

安装 spaze/mysql-session-handler 的首选方法是使用 Composer

$ composer require spaze/mysql-session-handler

设置

安装后

  1. 使用 SQL 在 sql/create.sql 中创建 sessions 表。

  2. 在 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,由 PematonMarián ČernýPeter Knut 开发,感谢!