3

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

应用程序.cfc

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

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

</cfcomponent>

索引.cfm

<html>
    <head>

    <title>Testing</title>

    </head>

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

我发现当我添加

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

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

4

3 回答 3

10

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

<cfset this.name = "foo">

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

于 2011-11-08T15:11:51.520 回答
3

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

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

如果变量没有持续存在,您是否检查过会话超时设置(在 ColdFusion 管理员中)?你可以在那里设置它,它为服务器上的所有应用程序设置一个默认值,或者你可以在 Application.cfc 中正确设置它:

THIS.SessionTimeout = CreateTimeSpan(0, 1, 0, 0); // One hour Session Timeout
于 2011-11-08T15:06:52.113 回答
1

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

于 2011-11-08T15:06:26.207 回答