diff --git a/app/controller/Crawler.php b/app/controller/Crawler.php index 6b7187a..faeba02 100644 --- a/app/controller/Crawler.php +++ b/app/controller/Crawler.php @@ -132,7 +132,7 @@ class Crawler extends BaseController return trim($cookies); } - // 只保留用户填写的Cookie,若同名键多值则取最后一个(单JSESSIONID场景) + // 只保留用户填写的Cookie,支持同名键多值(如双JSESSIONID) $cookieData = $cookies['请求 Cookie'] ?? $cookies; $normalized = []; @@ -141,25 +141,28 @@ class Crawler extends BaseController if ($k === '') { continue; } - $v = is_array($value) ? end($value) : $value; - $v = trim((string)$v); - if ($v === '') { - continue; + $vals = is_array($value) ? $value : [$value]; + foreach ($vals as $v) { + $v = trim((string)$v); + if ($v === '') { + continue; + } + $normalized[$k][] = $v; } - // 后面的值覆盖前面的值,确保单值 - $normalized[$k] = $v; } - // 将 JSESSIONID 放在最前(如果存在),其余按键名顺序 + // 将 JSESSIONID 放在最前(如果存在),其余按键名顺序,多值全部保留 $parts = []; if (isset($normalized['JSESSIONID'])) { - // 按用户需求:输出两个相同的 JSESSIONID - $parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; - $parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; + foreach ($normalized['JSESSIONID'] as $v) { + $parts[] = 'JSESSIONID=' . $v; + } unset($normalized['JSESSIONID']); } - foreach ($normalized as $k => $v) { - $parts[] = $k . '=' . $v; + foreach ($normalized as $k => $vArr) { + foreach ($vArr as $v) { + $parts[] = $k . '=' . $v; + } } return implode('; ', $parts); diff --git a/app/service/CrawlerService.php b/app/service/CrawlerService.php index 4f9325f..88f1eff 100644 --- a/app/service/CrawlerService.php +++ b/app/service/CrawlerService.php @@ -199,7 +199,7 @@ class CrawlerService return trim($cookies); } - // 只保留用户填写的Cookie,若同名键多值则取最后一个(单JSESSIONID场景) + // 只保留用户填写的Cookie,支持同名键多值(如双JSESSIONID) $cookieData = $cookies['请求 Cookie'] ?? $cookies; $normalized = []; @@ -208,24 +208,28 @@ class CrawlerService if ($k === '') { continue; } - $v = is_array($value) ? end($value) : $value; - $v = trim((string)$v); - if ($v === '') { - continue; + $vals = is_array($value) ? $value : [$value]; + foreach ($vals as $v) { + $v = trim((string)$v); + if ($v === '') { + continue; + } + $normalized[$k][] = $v; } - $normalized[$k] = $v; } - // 将 JSESSIONID 放在最前(如果存在),其余按键名顺序 + // 将 JSESSIONID 放在最前(如果存在),其余按键名顺序,多值全部保留 $parts = []; if (isset($normalized['JSESSIONID'])) { - // 按需求:输出两个相同的 JSESSIONID - $parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; - $parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; + foreach ($normalized['JSESSIONID'] as $v) { + $parts[] = 'JSESSIONID=' . $v; + } unset($normalized['JSESSIONID']); } - foreach ($normalized as $k => $v) { - $parts[] = $k . '=' . $v; + foreach ($normalized as $k => $vArr) { + foreach ($vArr as $v) { + $parts[] = $k . '=' . $v; + } } return implode('; ', $parts); diff --git a/view/crawler/index.html b/view/crawler/index.html index e7684c6..2529f96 100644 --- a/view/crawler/index.html +++ b/view/crawler/index.html @@ -246,7 +246,13 @@
- 从浏览器开发者工具中复制JSESSIONID的值 + 从浏览器开发者工具中复制JSESSIONID的值(必要) +
+ +
+ + + 若抓包中请求头里有第二个JSESSIONID,请一起填写
@@ -445,6 +451,7 @@ // 组装Cookie数据 function buildCookiesPayload(messageContainerId) { const jsessionid = document.getElementById('cookie-jsessionid').value.trim(); + const jsessionid2 = document.getElementById('cookie-jsessionid2').value.trim(); const serverid = document.getElementById('cookie-serverid').value.trim(); if (!jsessionid || !serverid) { @@ -452,12 +459,11 @@ return null; } - return { - "请求 Cookie": { - "JSESSIONID": jsessionid, - "SERVERID": serverid - } - }; + const cookies = { "请求 Cookie": {} }; + // 支持双 JSESSIONID + cookies["请求 Cookie"]["JSESSIONID"] = jsessionid2 ? [jsessionid, jsessionid2] : jsessionid; + cookies["请求 Cookie"]["SERVERID"] = serverid; + return cookies; } // 全选/取消全选