根据我提供的示例,我希望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,但是每次刷新页面时都会覆盖所有变量。
答案 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被禁用了。