日志升级与缓存修复最终版

This commit is contained in:
root
2026-06-16 04:58:56 +08:00
parent bcb9f293a6
commit 6b3b99b0f1
61 changed files with 2405 additions and 333 deletions
Regular → Executable
+13 -65
View File
@@ -1,86 +1,48 @@
<?php
require_once __DIR__ . '/ClientIpResolver.php';
require_once __DIR__ . '/FpUrlHelper.php';
require_once __DIR__ . '/CloakJudgmentCache.php';
/**
* 二次风控byApiRiskSession 缓存:同 Session 内复用判定结果,IP 变化时失效
* 二次风控缓存薄封装(委托 CloakJudgmentCache,保持既有调用点兼容)
*/
class RiskSecondaryCache
{
const SESSION_KEY = 'cloak_risk_cache';
const SESSION_KEY = 'cloak_judgment_cache';
/**
* @param array{result:string,reason?:string,fp_url?:string,ip?:string} $payload
* @param array{result:string,reason?:string,fp_url?:string,ip?:string,country?:string} $payload
*/
public static function store(array $payload)
{
$ip = ClientIpResolver::normalizeIp($payload['ip'] ?? ClientIpResolver::resolve());
if ($ip === null) {
return;
}
$_SESSION[self::SESSION_KEY] = [
'ip' => $ip,
'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(),
];
CloakJudgmentCache::storeFromByApiRisk($payload);
}
/**
* @param string|null $currentIp 为空时使用 ClientIpResolver::resolve()
* 仅返回最终缓存(partial 不视为命中)。
*
* @param string|null $currentIp
* @return array|null
*/
public static function get($currentIp = null)
{
if (empty($_SESSION[self::SESSION_KEY]) || !is_array($_SESSION[self::SESSION_KEY])) {
return null;
}
$cached = $_SESSION[self::SESSION_KEY];
$ip = ClientIpResolver::normalizeIp($currentIp !== null && $currentIp !== '' ? $currentIp : ClientIpResolver::resolve());
$cachedIp = ClientIpResolver::normalizeIp($cached['ip'] ?? '');
$invalidate = false;
if ($ip === null || $cachedIp === null || $ip !== $cachedIp) {
$invalidate = true;
} elseif (defined('CLOAK_RISK_NUMBER') && (int) ($cached['risk_number'] ?? -1) !== (int) CLOAK_RISK_NUMBER) {
$invalidate = true;
} elseif (defined('COSTM_IP_SCORE') && (string) ($cached['campaign_id'] ?? '') !== (string) COSTM_IP_SCORE) {
$invalidate = true;
}
if ($invalidate) {
self::clear();
$_SESSION['visit_to_3'] = '1';
return null;
}
return $cached;
return CloakJudgmentCache::getFinal($currentIp);
}
public static function clear()
{
unset($_SESSION[self::SESSION_KEY]);
CloakJudgmentCache::clear();
}
/**
* 将缓存同步到 visit_to_3 / check_result,供 RouteResolver 等复用。
*
* @param array $cached
*/
public static function applyToSession(array $cached)
{
$_SESSION['visit_to_3'] = 3;
$_SESSION['check_result'] = ($cached['result'] ?? '') === 'true' ? 'true' : 'false';
CloakJudgmentCache::applyToSession($cached);
}
public static function hitReason()
{
return '二次风控缓存命中';
return CloakJudgmentCache::hitReason();
}
/**
@@ -89,20 +51,6 @@ class RiskSecondaryCache
*/
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,
];
return CloakJudgmentCache::toApiResponse($cached);
}
}