sylae/ doctrine-dbal-session-handler
使用 doctrine/dbal 实现的 SessionHandlerInterface
v0.2
2022-09-09 12:15 UTC
Requires
- doctrine/dbal: ^3.4
This package is auto-updated.
Last update: 2024-09-06 23:36:31 UTC
README
此包提供了一个类 \Doctrine\DBAL\DBALSessionHandler,它允许您以尽可能少的努力将您的会话存储到 SQL 数据库中。
目前,它只在 mysql8 上进行了测试,但它应该适用于任何其他情况。唯一的难点是 REPLACE INTO 命令,但这很容易通过 pull-request 来解决 :p
使用示例
$db = \Doctrine\DBAL\DriverManager::getConnection(/* or whatever */); $sessionHandler = new \Doctrine\DBAL\DBALSessionHandler($db); $sessionHandler->setSessionTable("whatever"); // defaults to "sessions" if not called session_set_save_handler($sessionHandler, true);
默认情况下,我们还存储了这些会话的 IP 地址和用户代理,与实际的会话数据一起。此外,您可以通过传递一个可调用来提供用户 ID。这是为了方便用户查看他们账户上活跃的会话,并通过您的网站撤销它们。
$sessionHandler->setUserIDHandler(function (): ?int { return $this->user->id ?? null; // or wherever you keep your user ID. });
目前它不会为您进行任何高级的表管理,因此您需要执行一些 SQL 命令。
/* minimum you can get away with */ CREATE TABLE `sessions` ( `idSession` char(64) NOT NULL, `data` text, `ip` binary(16) DEFAULT NULL, `userAgent` varchar(255) DEFAULT NULL, `idUser` bigint unsigned DEFAULT NULL, /* change size as needed, this is just what i use */ PRIMARY KEY (`idSession`), ); /* what i use */ CREATE TABLE `sessions` ( `idSession` char(64) NOT NULL, `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `data` text, `ip` binary(16) DEFAULT NULL, `userAgent` varchar(255) DEFAULT NULL, `idUser` bigint unsigned DEFAULT NULL, PRIMARY KEY (`idSession`), KEY `sessions_ibfk_1` (`idUser`), CONSTRAINT `sessions_ibfk_1` FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;