Lucee refindNoCase 中的正则表达式
Regex in Lucee refindNoCase
我需要转换一段代码以便在 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 中,variables.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];
}
}
但现在 variables.sessionId 持有 'JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D'
这有什么不同?
我还尝试在 https://regex101.com/r/cO8lqs/4 上使用硬编码字符串,只给我 'CC319C9B3CFA261A72724EAEB36B5C2D')
当 运行 在 https://docs.lucee.org/reference/functions/refindnocase.html 上使用代码片段时,给我 'JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D'
两者 运行 完全相同的字符串。
我将如何在 Lucee 中获得我需要的东西,只有 'CC319C9B3CFA261A72724EAEB36B5C2D'?
它也需要 运行 在 CF 上,因为我们的生产服务器仍在 ACF 上..
这并不能解释为什么它在 Lucee 中有所不同 - 这可能是最近在 https://luceeserver.atlassian.net/browse/LDEV-2333?oldIssueView=true 中修复的错误的结果 - 但你的问题的答案:
"How would I go about in Lucee to get what I need, only
'CC319C9B3CFA261A72724EAEB36B5C2D'? And it needs to run on CF as well,
since our production server is still on ACF"
...为您提供 Adobe 和 Lucee 所需的结果,将使用
variables.sessionId = listFirst(listLast(refind.match[2],'='),';');
独立示例(var
已删除,因为它不在此处的函数中)=
<cfscript>
response.responseheader['Set-Cookie'] = ["JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D; HttpOnly=false; Secure; SameSite=None"];
if(structKeyExists(response.responseheader, 'Set-Cookie')) {
refind = refindNoCase("JSESSIONID=([\w\d]+);", response.responseheader['Set-Cookie'][1], 1, true);
if(structkeyexists(refind, 'match') and isArray(refind.match) and arraylen(refind.match) == 2) {
variables.sessionId = listFirst(listLast(refind.match[2],'='),';');
}
}
writeDump(variables.sessionId);
</cfscript>
我需要转换一段代码以便在 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 中,variables.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];
}
}
但现在 variables.sessionId 持有 'JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D'
这有什么不同? 我还尝试在 https://regex101.com/r/cO8lqs/4 上使用硬编码字符串,只给我 'CC319C9B3CFA261A72724EAEB36B5C2D') 当 运行 在 https://docs.lucee.org/reference/functions/refindnocase.html 上使用代码片段时,给我 'JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D' 两者 运行 完全相同的字符串。 我将如何在 Lucee 中获得我需要的东西,只有 'CC319C9B3CFA261A72724EAEB36B5C2D'? 它也需要 运行 在 CF 上,因为我们的生产服务器仍在 ACF 上..
这并不能解释为什么它在 Lucee 中有所不同 - 这可能是最近在 https://luceeserver.atlassian.net/browse/LDEV-2333?oldIssueView=true 中修复的错误的结果 - 但你的问题的答案:
"How would I go about in Lucee to get what I need, only 'CC319C9B3CFA261A72724EAEB36B5C2D'? And it needs to run on CF as well, since our production server is still on ACF"
...为您提供 Adobe 和 Lucee 所需的结果,将使用
variables.sessionId = listFirst(listLast(refind.match[2],'='),';');
独立示例(var
已删除,因为它不在此处的函数中)=
<cfscript>
response.responseheader['Set-Cookie'] = ["JSESSIONID=CC319C9B3CFA261A72724EAEB36B5C2D; HttpOnly=false; Secure; SameSite=None"];
if(structKeyExists(response.responseheader, 'Set-Cookie')) {
refind = refindNoCase("JSESSIONID=([\w\d]+);", response.responseheader['Set-Cookie'][1], 1, true);
if(structkeyexists(refind, 'match') and isArray(refind.match) and arraylen(refind.match) == 2) {
variables.sessionId = listFirst(listLast(refind.match[2],'='),';');
}
}
writeDump(variables.sessionId);
</cfscript>