diff --git a/typo3/sysext/frontend/Classes/Authentication/FrontendUserAuthentication.php b/typo3/sysext/frontend/Classes/Authentication/FrontendUserAuthentication.php index a98fdb3e6ac21e88c8e30cff13695b93a3a01e2a..044b1771f0f7dc3576650b905b777f6afb31c0aa 100644 --- a/typo3/sysext/frontend/Classes/Authentication/FrontendUserAuthentication.php +++ b/typo3/sysext/frontend/Classes/Authentication/FrontendUserAuthentication.php @@ -15,6 +15,7 @@ namespace TYPO3\CMS\Frontend\Authentication; */ use TYPO3\CMS\Core\Authentication\AbstractUserAuthentication; +use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Session\Backend\Exception\SessionNotFoundException; use TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -600,4 +601,24 @@ class FrontendUserAuthentication extends AbstractUserAuthentication $this->user = null; $this->loginHidden = true; } + + /** + * Update the field "is_online" every 60 seconds of a logged-in user + * + * @internal + */ + public function updateOnlineTimestamp() + { + if (!is_array($this->user) || !$this->user['uid'] + || $this->user['is_online'] >= $GLOBALS['EXEC_TIME'] - 60) { + return; + } + $dbConnection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('fe_users'); + $dbConnection->update( + 'fe_users', + ['is_online' => $GLOBALS['EXEC_TIME']], + ['uid' => (int)$this->user['uid']] + ); + $this->user['is_online'] = $GLOBALS['EXEC_TIME']; + } } diff --git a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php index 732992aee7c2db97d8817a49913e58e8db74c8c0..c76840693de36d41dd4cd0c223f8c721a2042572 100644 --- a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php +++ b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php @@ -911,20 +911,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['initFEuser'] ?? [] as $_funcRef) { GeneralUtility::callUserFunction($_funcRef, $_params, $this); } - // For every 60 seconds the is_online timestamp is updated. - if (is_array($this->fe_user->user) && $this->fe_user->user['uid'] && $this->fe_user->user['is_online'] < $GLOBALS['EXEC_TIME'] - 60) { - $dbConnection = GeneralUtility::makeInstance(ConnectionPool::class) - ->getConnectionForTable('fe_users'); - $dbConnection->update( - 'fe_users', - [ - 'is_online' => $GLOBALS['EXEC_TIME'] - ], - [ - 'uid' => (int)$this->fe_user->user['uid'] - ] - ); - } } /** @@ -963,6 +949,12 @@ class TypoScriptFrontendController implements LoggerAwareInterface if (!empty($gr_array) && !$this->loginAllowedInBranch_mode) { $this->gr_list .= ',' . implode(',', $gr_array); } + + // For every 60 seconds the is_online timestamp for a logged-in user is updated + if ($this->loginUser) { + $this->fe_user->updateOnlineTimestamp(); + } + $this->logger->debug('Valid usergroups for TSFE: ' . $this->gr_list); }