您好,我对 ColdFusion 10 非常陌生,尤其是 Application.cfc。这很令人困惑。 我创建了 Application.cfc,并在该 cfc 中创建了以下内容:
我的问题是:
1. 为什么会出现 session 错误? (请参阅下面的代码)
2. sessionEnd函数中应该放什么?
<!--- Application.cfc --->
<CFCOMPONENT displayname="Application" output="true">
<cfset THIS.Name = "MyTestApp" />
<cfset THIS.ApplicationTimeout = CreateTimeSpan(0,0,60,0) />
<cfset THIS.SessionManagement = true />
<cfset THIS.SessionTimeout = CreateTimeSpan( 0, 0, 30, 0 ) />
<cfset THIS.SetClientCookies = false />
<cfset THIS.SetClientCookies = false />
<cffunction name="OnApplicationStart" access="public"
returntype="boolean" output="false">
<cfset application.Main_DSN = "MyTestDB">
</cffunction>
<cffunction name="onApplicationEnd" output="false">
<cfargument name="applicationScope" required="true">
</cffunction>
<cffunction name="OnSessionStart" access="public" returntype="void" output="false"
hint="Fires when user session initializes">
<cfset session.loggedin = "NO">
<cfset session.username = "">
<cfset session.userrights = "">
<cfset session.usergroup = "">
</cffunction>
<!--- After user login, I have checklogin.cfm --->
<cfif mylogin NEQ true><!--- Login failed, go redirect to login page --->
<cflocation url="login.cfm">
<cfelse>
<cfset session.loggedin = "YES"><!--- ??? error: see below --->
<cfset session.username = "#Trim(Form.username)#">
<cfset session.userrights = "#Trim(Form.userrights )#">
<cfset session.usergroup = "#Trim(Form.usergroup)#">
</cfif>
<cffunction name="onSessionEnd">
<!--- Not sure what can I put in here????? --->
</cffunction>
最佳答案
您的登录代码位于 Application.cfc 文件中的任何事件处理程序之外,因此该代码将首先运行...在任何事件处理程序之前!
Application.cfc中代码的执行顺序为:
- 任何事件处理程序之外的代码(无论其位于文件中的位置)
- onApplicationStart()
- onSessionStart()
- onRequestStart()
- 等等
因此,您不能让代码在其他事件处理程序之外引用 session 范围(或应用程序范围)。只有在 onSessionStart()
触发后,您才能开始使用 session 变量。以前没有。
关于coldfusion - 在 Application.cfc 中设置 Session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24210100/