【发布时间】:2014-06-13 16:39:00
【问题描述】:
您好,我对 ColdFusion 10 非常陌生,尤其是 Application.cfc。这非常令人困惑。 我创建了 Application.cfc 并在这个 cfc 中创建了以下内容:
我的问题是:
1. 为什么会出现会话错误? (见下面我的代码)
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>
【问题讨论】:
-
您不必在 onSessionEnd() 中添加任何内容。如果您想在会话超时时执行某些操作,它就在那里。有些人会在会话超时时将会话数据保存到数据库或磁盘中,然后在下次用户登录时将其备份,以便他们可以从上次中断的地方继续。
-
您可能想在 Application.cfc 上查看本教程:bennadel.com/blog/…
-
对不起!!成功登录后出现的错误是:元素 LOGGEDIN 在 SESSION 中未定义。但实际上我已经在 OnsessionStart 函数中声明了它。我在 OnsessionStart 中声明了几个会话变量。成功登录后,我应该能够为这些会话变量赋值。这是我的理解。到目前为止,这是我唯一的问题,CF 没有检测到 session.LoggedIn,是的,似乎 OnSessionStart 没有触发,我该怎么办?
-
好的,正如您解释的那样,一旦应用程序启动, OnsessionStart 应该已经触发。我做了一些测试,并将 cfdump 用于登录表单中的所有会话变量(其中之一是 cfset session.loggedIn = "No")。当我点击登录表单时,在我开始登录之前,我可以看到我的会话变量!!!我可以看到我的会话变量已初始化,session.LoggedIn 值为“否”。现在不太好的消息是,当我在成功登录后分配 session.loggedIn="Yes" 时,我仍然得到相同的“Element LOGGEDIN is undefined in SESSION.”,我不明白。
-
mkross1983,感谢您抽出宝贵时间回复并帮助我。这是怎么回事:我的登录代码不在 OnsessionStart 或任何函数中。登录表单发布到 checklogin.cfm。登录验证在 checklogin.cfm 中完成。在这里,一旦用户被验证,我将值分配给我之前在 OnsessionStart 函数中设置的那些会话变量,但错误表明元素 LOGGEDIN 在 SESSION 中未定义。在 OnSessionStart 我设置
就是这样。在 checklogin.cfm 上,当用户成功验证时,我分配“YES”。
标签: coldfusion coldfusion-10 application.cfc