.. include:: /Includes.rst.txt .. _important-87298: ================================================================== Important: #87298 - [SECURITY] Destroy sessions on password change ================================================================== See :issue:`87298` Description =========== If a user - backend or frontend - changes the password, all existing sessions of that user must be destroyed for security reasons. In the core, we added functionality which takes care of this task with a DataHandler hook. Changing passwords in the backend will destroy all existing sessions of the edited user. The frontend login extension takes care of this task if the user resets a password (password recovery process). For all third party extensions which also handle password changes we added a method to the SessionManager class to easily integrate this important task, please check the code below: .. code-block:: php # For any example below, we need the SessionManager use \TYPO3\CMS\Core\Session\SessionManager; # 1) Example: Destroy all backend user sessions for a backend user $sessionManager = GeneralUtility::makeInstance(SessionManager::class); $sessionBackend = $sessionManager->getSessionBackend('BE'); $sessionManager->invalidateAllSessionsByUserId($sessionBackend, (int)$id); # 2) Example: Destroy all frontend user sessions for a frontend user $sessionManager = GeneralUtility::makeInstance(SessionManager::class); $sessionBackend = $sessionManager->getSessionBackend('FE'); $sessionManager->invalidateAllSessionsByUserId($sessionBackend, (int)$id); # 3) Example: Destroy all backend user sessions for a backend user but keep and renew current backend user session $sessionManager = GeneralUtility::makeInstance(SessionManager::class); $sessionBackend = $sessionManager->getSessionBackend('BE'); $sessionManager->invalidateAllSessionsByUserId($sessionBackend, (int)$id, $GLOBALS['BE_USER']); # 4) Example: Destroy all frontend user sessions for a frontend user but keep and renew current frontend user session $sessionManager = GeneralUtility::makeInstance(SessionManager::class); $sessionBackend = $sessionManager->getSessionBackend('FE'); $sessionManager->invalidateAllSessionsByUserId($sessionBackend, (int)$id, $GLOBALS['TSFE']->fe_user); .. index:: Backend, Frontend, PHP-API, ext:core