webwings/mysql-session-handler

带可选加密存储的Nette框架MySQL会话处理器

v3.0.0 2021-04-26 19:57 UTC

This package is not auto-updated.

Last update: 2024-09-25 23:05:39 UTC


README

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

要求

安装

安装webwings/mysql-session-handler的首选方式是使用 Composer

$ composer require webwings/mysql-session-handler

设置

安装后

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

  2. 在config.neon中注册一个扩展

	extensions:
		sessionHandler: Webwings\Session\DI\MysqlSessionHandlerExtension
  1. 设置DatabaseStorage
sessionHandler:
    storage: Webwings\Session\Storage\DibiDatabaseStorage(@dibi.connection, 'sessions')

特性

  • 出于安全考虑,会话ID以SHA-256哈希的形式存储在数据库中。
  • 支持通过 spaze/encryption 加密会话存储,它使用 paragonie/halite,而 Sodium 用于加密。
  • 允许您向会话存储表添加额外列的事件。
  • 多主复制友好(在主-主行复制设置中进行了测试)。

加密的会话存储

按照spaze/encryption中的指南定义一个新的加密密钥。

定义一个新的服务

sessionEncryption: \Spaze\Encryption\Symmetric\StaticKey('session', %encryption.keys%, %encryption.activeKeyIds%)

将新的加密服务添加到会话处理器中

sessionHandler:
    encryptionService: @sessionEncryption

从未加密的会话存储迁移到加密的会话存储尚不支持。

事件

onBeforeDataWrite

该事件在会话数据写入会话表之前发生,无论是新会话(当插入新行时)还是现有会话(行被更新)。如果没有更改会话数据,只是更新会话时间戳,则不会触发此事件。

您可以在事件处理程序中调用setAdditionalData()来添加新列

setAdditionalData(string $key, $value): void

用它来存储例如用户ID,该ID属于会话。

致谢

本项目在很大程度上基于 MySQL Session handler,由 Pematon (Marián Černý & Peter Knut & Michal Špaček) 开发,谢谢!