这是用CF写的,但我不认为这是问题所在。虽然,我可能错了,我已经盯着看了这么久,它已经让我的头都扭曲了。
总体思路是,如果数据结构未定义,或者 DS 中缺少特定成员,或者该成员是“”,则转发到另一个页面来修复它。我一般不喜欢做负逻辑,但在这种情况下,正逻辑或直接接近会使 3 行 IF 子句变成一页长的 if/then/else。
<cfset session.returnURL = "/future/dashboard.cfm">
<!---
<cfset session.agentCode = "">
--->
<cfset session.agentCode = "123456789sd">
<cfdump var="#(isStruct(session) neq true)#">
<cfdump var='#(StructKeyExists(session, "agentcode") neq true)#'>
<cfdump var='#(session.agentcode eq "")#'>
<cfdump var=#((isStruct("session") neq true)or(StructKeyExists(session,"agentcode") neq true)
or (session.agentcode eq ""))#>
<cfif ((isStruct("session") neq true) or (StructKeyExists(session, "agentcode") neq true)
or (session.agentcode eq ""))>
<cfoutput>#session.agentCode#</cfoutput>
<cfexit>
<!--- <cflocation url="/future/security/login.cfm" addtoken="No"> --->
</cfif>
.
.
.
前三个转储按预期输出: "No No No" 或 "No No Yes" ,具体取决于为 session.agentCode 公开哪个 cfset。但是当我在第四个和 IF 语句中将它们与 OR 组合时,无论 3 个输入如何,它都会返回 Yes。通常,这意味着存在嵌套/优先级问题,但我没有看到它。 OR 中的三个“否”应该返回“否”!
谢谢!
问题似乎出在第四次和第五次转储中 isStruct 中围绕“session”的引号;如果你把它们拿走,它应该可以工作。