Мне нужно преобразовать часть кода, чтобы он работал на Lucee.
Это рабочий код в CF, который не работает в Lucee:
if(structKeyExists(response.responseheader, 'Set-Cookie')) {
var refind = refindNoCase("JSESSIONID=([\w\d]+);", response.responseheader['Set-Cookie'], 1, true);
if(structkeyexists(refind, 'match') and isArray(refind.match) and arraylen(refind.match) == 2) {
variables.sessionId = refind.match[2];
}
}
response.responseheader['Set-Cookie'] представляет собой массив:
Array
1
string JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D; HttpOnly=false; Secure; SameSite=None
В CF вывод переменных.sessionId = CC319C9B3CFA261A72724EAEB36B5C2D, что мне и нужно.
Lucee выдает ошибку: невозможно преобразовать массив сложных объектов в строку, поэтому я изменил свой код на:
if(structKeyExists(response.responseheader, 'Set-Cookie')) {
var refind = refindNoCase("JSESSIONID=([\w\d]+);", serialize(response.responseheader['Set-Cookie']), 1, true);
if(structkeyexists(refind, 'match') and isArray(refind.match) and arraylen(refind.match) == 2) {
variables.sessionId = refind.match[2];
}
}
Но теперь variable.sessionId содержит «JSESSIONID = CC319C9B3CFA261A72724EAEB36B5C2D».
Как это может быть другим? Я также пытался использовать жестко запрограммированные строки на https://regex101.com/r/cO8lqs/4. , давая мне только «CC319C9B3CFA261A72724EAEB36B5C2D») И при запуске фрагмента кода на https://docs.lucee.org/reference/functions/refindnocase.html, что дает мне «JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D». Оба работают с одной и той же строкой. Как мне в Lucee получить то, что мне нужно, только «CC319C9B3CFA261A72724EAEB36B5C2D»? И он также должен работать на CF, так как наш рабочий сервер все еще работает на ACF.
refind.match[2]
, но только одна группа захвата. Попробуйтеrefind.match[1]
. Кроме того, работает ли"(?<=JSESSIONID=)\w+(?=;)"
? - person Wiktor Stribiżew   schedule 14.01.2021reFind()
иreFindNoCase()
не возвращали массив совпадений для групп захвата правильно, и это было исправлено всего несколько месяцев назад в 5.3.8.80 согласно luceeserver.atlassian.net/browse/LDEV-2333?oldIssueView=true - person Sev Roberts   schedule 14.01.2021