嗨,我对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>
答案 0 :(得分:2)
您的登录代码位于Application.cfc文件中的任何事件处理程序之外,因此代码将首先运行...在任何事件处理程序之前!
Application.cfc中代码的执行顺序是:
因此,您无法在其他事件处理程序之外引用引用会话范围(或应用程序范围)的代码。 onSessionStart()
触发后,您才能开始使用会话变量。不是之前。
答案 1 :(得分:0)
您收到的错误消息是什么?
你真的可以在会话结束时放任何东西。在会话结束后需要运行以清理的任何内容。
也许您想要更新日志或发送电子邮件,清除Cookie或重定向到某个页面。
修改强>
Application.cfc中的其他所有内容都适用于您吗?似乎onSessionStart事件没有触发。
编辑2:* 很抱歉通过回答这样做,但我需要更多的代表留下评论。
会话应该在您连接到应用程序后立即启动,您无需等待“登录”验证凭据。
如果会话变量不存在,则由于某种原因事件未触发。确保您具有正确的文件名,并且它位于应用程序的根文件夹中。
编辑3: 您的登录代码不在onSessionStart函数中,不在任何函数中。除非我误解了您的评论,并且您说代码部分位于“checklogin.cfm”文件中而不是Application.cfc文件中。
编辑4: 我需要跳一个客户电话,但我可以帮助更多。我们可能需要查看checklogin.cfm文件的一部分。
编辑5: 运气好吗?
编辑6: 对不起,延迟,今天下午量增加。
此时我想我需要查看正在进行验证检查的代码,或者询问您是否确定验证工作正常。
我假设您正在连接到数据库,如果您使用用于验证登录凭据的查询并在SQL Server中运行它或者无法插入您将在表单中键入的值,您会得到任何结果吗? / p>
编辑7: 搞清楚,OP?