This commit is contained in:
杨志
2026-01-20 16:41:42 +08:00
parent 14813e9d5d
commit bd7687930d
3 changed files with 45 additions and 32 deletions

View File

@@ -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);

View File

@@ -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);