在Application.cfc中设置Session变量

时间:2014-06-13 16:39:00

标签: coldfusion coldfusion-10 application.cfc

嗨,我对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>

2 个答案:

答案 0 :(得分:2)

您的登录代码位于Application.cfc文件中的任何事件处理程序之外,因此代码将首先运行...在任何事件处理程序之前!

Application.cfc中代码的执行顺序是:

  • 任何事件处理程序之外的代码(无论文件在何处)
  • onApplicationStart()
  • onSessionStart()
  • onRequestStart()

因此,您无法在其他事件处理程序之外引用引用会话范围(或应用程序范围)的代码。 onSessionStart()触发后,您才能开始使用会话变量。不是之前。

答案 1 :(得分:0)

您收到的错误消息是什么?

你真的可以在会话结束时放任何东西。在会话结束后需要运行以清理的任何内容。

也许您想要更新日志或发送电子邮件,清除Cookie或重定向到某个页面。

修改

Application.cfc中的其他所有内容都适用于您吗?似乎onSessionStart事件没有触发。

编辑2:* 很抱歉通过回答这样做,但我需要更多的代表留下评论。

会话应该在您连接到应用程序后立即启动,您无需等待“登录”验证凭据。

如果会话变量不存在,则由于某种原因事件未触发。确保您具有正确的文件名,并且它位于应用程序的根文件夹中。

编辑3: 您的登录代码不在onSessionStart函数中,不在任何函数中。除非我误解了您的评论,并且您说代码部分位于“checklogin.cfm”文件中而不是Application.cfc文件中。

编辑4: 我需要跳一个客户电话,但我可以帮助更多。我们可能需要查看checklogin.cfm文件的一部分。

编辑5: 运气好吗?

编辑6: 对不起,延迟,今天下午量增加。

此时我想我需要查看正在进行验证检查的代码,或者询问您是否确定验证工作正常。

我假设您正在连接到数据库,如果您使用用于验证登录凭据的查询并在SQL Server中运行它或者无法插入您将在表单中键入的值,您会得到任何结果吗? / p>

编辑7: 搞清楚,OP?