Fixes to show session expiration only once

main
Yasen Pramatarov 2025-04-14 15:31:19 +03:00
parent 8655258ac3
commit 649a94c560
4 changed files with 12 additions and 4 deletions

View File

@ -108,6 +108,9 @@ class Session {
// Start fresh session // Start fresh session
self::startSession(); self::startSession();
// Reset session timeout flag
unset($_SESSION['session_timeout_shown']);
} }
/** /**

View File

@ -16,8 +16,10 @@ function applySessionMiddleware($config, $app_root, $isTest = false) {
// Check session validity // Check session validity
if (!Session::isValidSession()) { if (!Session::isValidSession()) {
// Only show session timeout message if there was an active session // Only show session timeout message if there was an active session
if (isset($_SESSION['LAST_ACTIVITY'])) { // and we haven't shown it yet
if (isset($_SESSION['LAST_ACTIVITY']) && !isset($_SESSION['session_timeout_shown'])) {
Feedback::flash('LOGIN', 'SESSION_TIMEOUT'); Feedback::flash('LOGIN', 'SESSION_TIMEOUT');
$_SESSION['session_timeout_shown'] = true;
} }
// Session invalid, clean up and redirect // Session invalid, clean up and redirect

View File

@ -271,7 +271,7 @@ try {
// Show configured login message if any // Show configured login message if any
if (!empty($config['login_message'])) { if (!empty($config['login_message'])) {
echo Feedback::render('NOTICE', 'DEFAULT', $config['login_message'], false); echo Feedback::render('NOTICE', 'DEFAULT', $config['login_message'], false, false, false);
} }
// Get any new feedback messages // Get any new feedback messages

View File

@ -116,8 +116,11 @@ if ($validSession) {
$currentUser = Session::getUsername(); $currentUser = Session::getUsername();
} else if (isset($_COOKIE['username']) && !in_array($page, $public_pages)) { } else if (isset($_COOKIE['username']) && !in_array($page, $public_pages)) {
// Cookie exists but session is invalid - redirect to login // Cookie exists but session is invalid - redirect to login
Feedback::flash('LOGIN', 'SESSION_TIMEOUT'); if (!isset($_SESSION['session_timeout_shown'])) {
header('Location: ' . htmlspecialchars($app_root) . '?page=login&timeout=1'); Feedback::flash('LOGIN', 'SESSION_TIMEOUT');
$_SESSION['session_timeout_shown'] = true;
}
header('Location: ' . htmlspecialchars($app_root) . '?page=login');
exit(); exit();
} else if (!in_array($page, $public_pages)) { } else if (!in_array($page, $public_pages)) {
// No valid session or cookie, and not a public page // No valid session or cookie, and not a public page