0 && !self::isFinalized()) { return true; } if (!empty($_SESSION[self::KEY_ACTIVE]) && self::currentLogId() <= 0) { return true; } return false; } /** * INSERT 前:已 finalize 或刷新后的新 visit 清除旧绑定。 */ public static function prepareForNewInsert() { if (!self::isNewVisit()) { return; } $hadFinalized = self::isFinalized(); unset($_SESSION[self::KEY_FINALIZED]); if ($hadFinalized || self::isRefreshNavigation()) { unset($_SESSION[self::KEY_LOG_ID]); } if (empty($_SESSION[self::KEY_ACTIVE])) { self::markVisitActive(); } if (class_exists('VisitorApiAudit', false)) { VisitorApiAudit::clearByApi(); } } public static function shouldPersistAsUpdate() { return self::currentLogId() > 0 && !self::isFinalized() && !self::isNewVisit(); } /** * @param int $logId */ public static function bindLogId($logId) { $logId = (int) $logId; if ($logId > 0) { $_SESSION[self::KEY_LOG_ID] = $logId; } } /** * @param string|null $result */ public static function finalizeVisit($result = null) { $_SESSION[self::KEY_FINALIZED] = 1; unset($_SESSION[self::KEY_ACTIVE]); } /** * @param string $result */ public static function shouldFinalizeOnResult($result) { $r = (string) $result; return $r === 'true' || $r === 'false'; } /** * @param array $logs * @return array */ public static function normalizeLogsForDb(array $logs) { $result = (string) ($logs['result'] ?? ''); if (function_exists('cloak_normalize_log_reason')) { $logs['reason'] = cloak_normalize_log_reason($result, $logs['reason'] ?? ''); } return $logs; } }