Fixes session timeout and login issues

main
Yasen Pramatarov 2025-04-23 13:54:59 +03:00
parent e88229bee2
commit 3657dd70cf
1 changed files with 12 additions and 24 deletions

View File

@ -171,35 +171,23 @@ function filter_public_pages($pages) {
} }
$public_pages = filter_public_pages($public_pages); $public_pages = filter_public_pages($public_pages);
// Check if the requested page requires authentication
if (!isset($_COOKIE['username']) && !$validSession && !in_array($page, $public_pages)) {
$loginUrl = $app_root . '?page=login';
// Use the central exclusion list for redirect
$trimmed = trim($page, '/?');
if (!in_array($trimmed, INVALID_REDIRECT_PAGES, true)) {
$loginUrl .= '&redirect=' . urlencode($_SERVER['REQUEST_URI']);
}
header('Location: ' . $loginUrl);
exit();
}
// Check session and redirect if needed // Check session and redirect if needed
$currentUser = null; $currentUser = null;
if ($validSession) { if ($validSession) {
// Session is OK
$currentUser = Session::getUsername(); $currentUser = Session::getUsername();
} else if (isset($_COOKIE['username']) && !in_array($page, $public_pages)) {
// Cookie exists but session is invalid - redirect to login
require_once '../app/includes/session_middleware.php';
applySessionMiddleware($config, $app_root);
$loginUrl = $app_root . '?page=login';
$trimmed = trim($page, '/?');
if (!in_array($trimmed, INVALID_REDIRECT_PAGES, true)) {
$loginUrl .= '&redirect=' . urlencode($_SERVER['REQUEST_URI']);
}
header('Location: ' . $loginUrl);
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 // Session expired/invalid, page needs login
if (isset($_SESSION['LAST_ACTIVITY']) && !isset($_SESSION['session_timeout_shown'])) {
// Only show session timeout message if there was an active session
// and we haven't shown it yet
Feedback::flash('LOGIN', 'SESSION_TIMEOUT');
$_SESSION['session_timeout_shown'] = true;
// Cleanup session but keep flash messages
$flash_messages = $_SESSION['flash_messages'] ?? [];
Session::cleanup($config);
$_SESSION['flash_messages'] = $flash_messages;
}
$loginUrl = $app_root . '?page=login'; $loginUrl = $app_root . '?page=login';
$trimmed = trim($page, '/?'); $trimmed = trim($page, '/?');
if (!in_array($trimmed, INVALID_REDIRECT_PAGES, true)) { if (!in_array($trimmed, INVALID_REDIRECT_PAGES, true)) {