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

Session 是否可以在Application.cfc中设置会话变量,然后从任何应用程序页面检索它?,session,coldfusion,application.cfc,Session,Coldfusion,Application.cfc,根据我提供的示例,我希望index.cfm显示hello 我怎样才能做到这一点? Application.cfc <cfcomponent> <cfset this.sessionManagement = true /> <cffunction name="onSessionStart"> <cfset SESSION.myVar = "hello"> </cffunction> </

根据我提供的示例,我希望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>

测试
#SESSION.myVar#
我发现当我添加

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


对于index.cfm,它可以工作,但是每次刷新页面时都会覆盖所有变量。

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

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

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

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

<cfset this.name = "foo">


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

+1检查每个页面上是否定义了变量的注意事项。duh。真不敢相信我错过了+1I由于稍微不同的原因,每次请求都会调用onSessionStart。My application.cfc是从ColdBox扩展而来的,但我也运行了一个单独的引导ColdBox实例(复制/粘贴错误)。因此,有时即使会话信息被传回,也会发生这种情况。
<cfset this.name = "foo">