What are best practices for handling session expiration and regeneration in PHP to ensure security and prevent session fixation?
Session expiration and regeneration in PHP can help prevent session fixation attacks and enhance security. To handle session expiration, you can set a timeout for the session and regenerate the session ID periodically. This ensures that even if an attacker manages to fixate a session ID, it will be invalidated after a certain period of inactivity.
// Set session timeout to 30 minutes
ini_set('session.gc_maxlifetime', 1800);
// Regenerate session ID every 30 minutes
if (isset($_SESSION['last_activity']) && time() - $_SESSION['last_activity'] > 1800) {
session_regenerate_id(true);
$_SESSION['last_activity'] = time();
}
// Start or resume session
session_start();
// Update last activity timestamp
$_SESSION['last_activity'] = time();