v_ip = $cached['ip']; } if (array_key_exists('country', $cached) && (string) $cached['country'] !== '') { $v_info->v_country = (string) $cached['country']; } } public static function clear() { unset($_SESSION[self::SESSION_KEY]); } public static function hitReason() { return '缓存'; } /** * @param array $cached * @return array{result:bool,reason:string,link:string} */ public static function toApiResponse(array $cached) { $passed = ($cached['result'] ?? '') === 'true'; $link = (string) ($cached['fp_url'] ?? ''); if ($passed && $link === '') { $link = FpUrlHelper::fallbackUrl(); } if (!$passed && $link === '' && defined('DB_ZP')) { $link = (string) DB_ZP; } return [ 'result' => $passed, 'reason' => self::hitReason(), 'link' => $link, ]; } /** * @param string $stage * @param array $payload */ private static function writeCache($stage, array $payload) { $ip = ClientIpResolver::normalizeIp($payload['ip'] ?? ClientIpResolver::resolve()); if ($ip === null) { return; } $country = (string) ($payload['country'] ?? ''); if ($country === '' && !empty($_SESSION['gcu_country'])) { $country = (string) $_SESSION['gcu_country']; } if ($country === '') { $country = (string) (GeoIpCountryResolver::resolve($ip) ?? ''); } $_SESSION[self::SESSION_KEY] = [ 'stage' => $stage, 'ip' => $ip, 'country' => $country, 'result' => ($payload['result'] ?? '') === 'true' ? 'true' : 'false', 'reason' => (string) ($payload['reason'] ?? ''), 'fp_url' => (string) ($payload['fp_url'] ?? ''), 'risk_number' => defined('CLOAK_RISK_NUMBER') ? (int) CLOAK_RISK_NUMBER : 0, 'campaign_id' => defined('COSTM_IP_SCORE') ? (string) COSTM_IP_SCORE : '', 'cached_at' => time(), ]; } /** * @param string $currentIp */ private static function refreshCountryForCurrentIp($currentIp) { if (!self::hasSession()) { return; } $cached = $_SESSION[self::SESSION_KEY]; $cached['ip'] = $currentIp; $cached['country'] = (string) (GeoIpCountryResolver::resolve($currentIp) ?? ''); $_SESSION[self::SESSION_KEY] = $cached; $_SESSION['gcu_ip'] = $currentIp; $_SESSION['gcu_country'] = $cached['country']; } /** * @param array $cached */ private static function isConfigValid(array $cached) { if (defined('CLOAK_RISK_NUMBER') && (int) ($cached['risk_number'] ?? -1) !== (int) CLOAK_RISK_NUMBER) { return false; } if (defined('COSTM_IP_SCORE') && (string) ($cached['campaign_id'] ?? '') !== (string) COSTM_IP_SCORE) { return false; } return true; } }