300) { foreach ($_SESSION["characters"] as $character_id => &$charData) { // Skip invalid character entries if (empty($character_id)) continue; if (isset($charData["refresh_token"])) { // Check if the access token is expired or missing if (!isset($charData["access_token"]) || is_token_expired($charData["access_token"])) { $new_tokens = refresh_token($charData["refresh_token"]); if (!empty($new_tokens["access_token"])) { $charData["access_token"] = $new_tokens["access_token"]; $tokens_refreshed = true; } } } } unset($charData); // Break reference to avoid unexpected behavior $_SESSION['last_token_refresh'] = $page_load_time; // Only clear cache if tokens were refreshed if ($tokens_refreshed) { // Clear specific cache entries $cache_keys = [ 'character_jobs_', 'corporation_jobs_', 'all_character_blueprints' ]; foreach ($cache_keys as $prefix) { $cleared = clear_cache_by_prefix($prefix); if ($cleared) $cache_cleared = true; } } } } echo json_encode([ "status" => "success", "message" => "Session refreshed", "tokens_refreshed" => $tokens_refreshed, "cache_cleared" => $cache_cleared, "timestamp" => time() ]); } else { echo json_encode(["status" => "error", "message" => "Session not active"]); } // Function to clear cache entries by prefix function clear_cache_by_prefix($prefix) { $cache_dir = __DIR__ . "/cache"; $cache_file = $cache_dir . "/api_cache.json"; if (!file_exists($cache_file)) { return false; } $cache = json_decode(file_get_contents($cache_file), true) ?: []; $cleared = false; foreach ($cache as $key => $value) { if (strpos($key, $prefix) === 0) { unset($cache[$key]); $cleared = true; } } if ($cleared) { file_put_contents($cache_file, json_encode($cache)); } return $cleared; } ?>