Можно ли установить переменную сеанса в Application.cfc, а затем извлечь ее со страницы приложения? - PullRequest
3 голосов
/ 08 ноября 2011

В приведенном мною примере я бы хотел, чтобы 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 ]

10 голосов
/ 08 ноября 2011

Вам необходимо дать приложению имя, например:

<cfset this.name = "foo">

В вашем псевдо-конструкторе Application.cfc. В противном случае CF не может создать приложение и поэтому не может связать сеанс с приложением.

3 голосов
/ 08 ноября 2011

Я предполагаю, что вы новичок в 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
1 голос
/ 08 ноября 2011

Да, вы можете установить переменные в onSessionStart и использовать их в приложении. Функция onSessionStart срабатывает только при создании нового сеанса, поэтому, если он вызывается при каждом запросе, ваши сеансы не сохраняются (ваш CFID / CFTOKEN, JSESSIONID) не передается последующим запросам. Вероятно, это связано с отключением файлов cookie.

...