Windows2003上運行ColdFusion 8.01標準/ IIS6爲什麼在引用幾行之前ColdFusion SESSION變量「undefined」?
的Application.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()
。上面的代碼在模板文件中運行。對SESSION.User
的第二個引用引發了一個異常,消息Element USER is undefined in SESSION
。
爲什麼會在幾行之前定義SESSION.User(不拋出異常),然後在幾行之後拋出這個異常(毫秒)?
在我的應用程序中,這種情況可能每天發生在不同的模板中。
我該如何預防?
不知道你的問題是什麼,但你應該在'onSessionStart()'而不是'onRequestStart()'中啓動你的會話變量。 –
也許有些用戶正在使用多個標籤頁/窗口在您的網站上工作,也許一個標籤頁正在做某件事,但之後他們會在另一個標籤頁中註銷,從而破壞您的會話變量。或者,也許在他們退出一個標籤之後,他們會回到前一個標籤並嘗試某種行動。在我的CF應用程序中,如果用戶註銷,則所有其他選項卡也必須退出並返回到登錄頁面。 – gfrobenius