gpt4 book ai didi

session - 为什么 ColdFusion SESSION 变量在几行之前被引用后是 "undefined"?

转载 作者:行者123 更新时间:2023-12-04 17:49:22 25 4
gpt4 key购买 nike

在 Windows2003/IIS6 上运行 ColdFusion 8.01 Standard

应用程序.cfc:

<cfcomponent output="false">
<cfscript>
THIS.SessionManagement = "Yes";
THIS.SessionTimeout = CreateTimeSpan(0, 3, 0, 0);
THIS.ApplicationTimeout = CreateTimeSpan(0, 8, 0, 0);
</cfscript>

<cffunction name="onRequestStart" returnType="Boolean" output="false">
<cfargument name="targetPage" type="string" required="true">

<cfscript>
if (!StructKeyExists(SESSION, "User"))
SESSION.User = CreateObject("component", "cfc.User");
</cfscript>
</cffunction>
</cfcomponent>

模板文件伪代码示例:
    LOCAL.qItems =
CreateObject(
"component",
"cfc.Items"
).setUser(SESSION.User).getItems();

for (i=1; i<=LOCAL.qItems.RECORDCOUNT; i++) {
LOCAL.Item =
CreateObject(
"component",
"cfc.Item"
).setUser(
SESSION.User
).setId(LOCAL.qItems["Sku"][i]);
}

SESSION.User 在 onRequestStart() 中设置(如果尚未定义)的 Application.cfc .上面的代码在模板文件中运行。第二次引用 SESSION.User已抛出异常消息 Element USER is undefined in SESSION .

为什么要在几行之前定义 SESSION.User(不抛出异常),然后在几行之后(在几毫秒内)抛出这个异常?

这可能每天在我的整个应用程序中的不同模板中发生一次。

我怎样才能防止这种情况?

最佳答案

这很可能是您的代码中的其他内容清除 session 范围或将 NULL 分配给 SESSION.User 的线程安全问题。 .

我建议这样做,因为您似乎没有 i 的本地声明在您的循环中,因此该代码不是线程安全的 - 因此您的代码中的其他地方可能会出现类似的错误。

关于session - 为什么 ColdFusion SESSION 变量在几行之前被引用后是 "undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com