diff --git a/README.md b/README.md index fac47d0..b12839b 100644 --- a/README.md +++ b/README.md @@ -164,8 +164,8 @@ When flash data is restore, it will be delete in $_SESSION. * setUserIdForDatabase(userId: int): void * setLengthSessionID(length: int): void * getLengthSessionID(): int -* deleteUserSessions(int $userID): void -* deleteAnonymousSessions(): int +* deleteUserSessionsInDatabase(int $userID): void +* deleteAnonymousSessionsInDatabase(): int #### Static Redis Driver * useNewRedisDriver(configuration: array|string): void diff --git a/src/DriverManager.php b/src/DriverManager.php index bcc3378..7ac0308 100644 --- a/src/DriverManager.php +++ b/src/DriverManager.php @@ -198,4 +198,18 @@ public static function setPrefixForFile(string $prefix): void static::$driver->setPrefix($prefix); } } + + public static function deleteUserSessionsInDatabase(int $userID): void + { + if (\method_exists(static::$driver, 'deleteUserSessions')) { + static::$driver->deleteUserSessions($userID); + } + } + + public static function deleteAnonymousSessionsInDatabase(): void + { + if (\method_exists(static::$driver, 'deleteAnonymousSessions')) { + static::$driver->deleteAnonymousSessions(); + } + } } diff --git a/tests/SessionTest.php b/tests/SessionTest.php index 806b376..e252bca 100644 --- a/tests/SessionTest.php +++ b/tests/SessionTest.php @@ -308,8 +308,24 @@ public function testUseCurrentDatabaseEncryptionDriver(): void $sessionId = Session::getId(); Session::commit(); + $sql = 'REPLACE INTO sessions VALUES(:id, null, UTC_TIMESTAMP(), :content)'; + $params = ['id' => 'session_123', 'content' => 'content']; + $db->insert($sql, $params); + + static::assertSame(1, $db->count('SELECT COUNT(id) FROM sessions WHERE id_user IS NULL')); + static::assertSame(1, $db->count('SELECT COUNT(id) FROM sessions WHERE id_user IS NOT NULL')); + $userIdInTable = (int) $db->selectVar('SELECT id_user FROM sessions WHERE id = :id', ['id' => $sessionId]); static::assertSame($userId, $userIdInTable); + + Session::deleteAnonymousSessionsInDatabase(); + + static::assertEmpty($db->count('SELECT COUNT(id) FROM sessions WHERE id_user IS NULL')); + static::assertSame(1, $db->count('SELECT COUNT(id) FROM sessions WHERE id_user IS NOT NULL')); + + Session::deleteUserSessionsInDatabase($userId); + + static::assertEmpty($db->count('SELECT COUNT(id) FROM sessions WHERE id = :id', ['id' => $sessionId])); } /** @throws \Exception */