可以在Application.cfc中设置会话变量,然后从任何应用程序页面中检索它吗?

时间:2011-11-08 14:18:37

标签: session coldfusion application.cfc

根据我提供的示例,我希望index.cfm显示hello 我该怎么做?

的Application.cfc

<cfcomponent>
    <cfset this.sessionManagement = true /> 

    <cffunction name="onSessionStart">
        <cfset SESSION.myVar = "hello">
    </cffunction>

</cfcomponent>

index.cfm

<html>
    <head>

    <title>Testing</title>

    </head>

    <body>
        <cfoutput>#SESSION.myVar#</cfoutput>
    </body>
</html>

我发现当我添加

<cfinvoke component="Application" method="onSessionStart">

到它运作的index.cfm,但是每次刷新页面时都会覆盖所有变量。

3 个答案:

答案 0 :(得分:10)

您需要为您的应用程序命名,例如:

<cfset this.name = "foo">

在Application.cfc伪构造函数中。否则CF无法创建应用程序,因此无法将会话与应用程序关联。

答案 1 :(得分:3)

我假设你是ColdFusion或者至少是Application.cfc的新手,但是,onSessionStart是在你的应用程序中启动Session变量的基本方法。当然,可以在任何其他页面中设置/删除/重置它们,因此在输出之前检查SESSION范围中变量是否存在可能是一个很好的实践:

<cfif StructKeyExists(SESSION, "myVar")>
    <cfoutput>#SESSION.myVar#</cfoutput>
</cfif>

如果变量不存在,您是否已检查过会话超时设置(在ColdFusion Administrator中)?您可以在那里设置它,为服务器上的所有应用程序设置默认值,或者您可以在Application.cfc中设置它:

THIS.SessionTimeout = CreateTimeSpan(0, 1, 0, 0); // One hour Session Timeout

答案 2 :(得分:1)

是的,您可以在onSessionStart中设置变量并在应用程序中使用它们。 onSessionStart函数仅在创建新会话时触发,因此如果在每个请求上调用它,则会话不会持久化(您的CFID / CFTOKEN,JSESSIONID)不会传递给后续请求。这可能是因为cookie被禁用了。