Функция сеанса вызовов ColdFusion

У меня есть пользовательский объект, который я хотел бы иметь в переменной сеанса и иметь возможность обновлять по мере необходимости. Как мне вызвать функцию в существующем пользовательском объекте, которая будет манипулировать существующей переменной. Я нашел способ вызвать функцию, но она не вызывает существующий объект, вместо этого я подозреваю, что она создает экземпляр нового объекта перед вызовом функции.

В Application.cfc:

<cffunction name = "onSessionStart" output="no">
    <cfobject name="session._user" component="user"/>
    <cfscript>
    ...
    session._user.init();
    </cfscript>
</cffunction>

В User.cfc:

<cffunction name = "init">
    <cfscript>
        variables.attributes.variable1 = 0;
    </cfscript>
</cffunction>

<cffunction name="changeVariable" access="public">
    <cfargument name = "somename">
    variables.attributes.variable1 = arguments.somename;
</cffunction>

Позже в login.cfm вызовите session._user.changeVariable(2)

Если это невозможно, я в конечном итоге буду писать в базу данных и из нее, чтобы отслеживать свойства пользователя, а не использовать переменную сеанса.


person Hyon    schedule 28.04.2015    source источник
comment
То, что у вас есть выше фактической функции changeVariable, которую вы используете? Мне кажется, что у него несколько проблем, и я бы не ожидал, что он будет работать в его нынешнем состоянии.   -  person Barry    schedule 29.04.2015


Ответы (2)


В onSessionStart создайте объект и установите его в сеанс. Если вы используете CF10+, вы можете использовать new(), в CF9 и ниже вам нужно использовать createObject().

<cffunction name="onSessionStart">
  <!--- in CF10+ new calls init() automatically --->
  <cfset session._user = new user()> 
  <!--- CF9 or lower --->
  <cfset session._user = createObject('user').init()>
</cffunction>

В login.cfm просто скажите это, чтобы обновить переменную сеанса.

<cfset session._user.changeVariable(2)>
person Matt Busche    schedule 28.04.2015
comment
Спасибо. Мне не хватало cfset при его вызове. - person Hyon; 04.05.2015

Я никогда не делал этого таким образом, поэтому я не уверен, как это работает, но обычно я создаю файл user.cfc и сохраняю экземпляр в сеансе.

<cffunction name="onSessionStart" output="false">
    <cfset session._user = new user()>
</cffunction>

Я бы также рассмотрел возможность использования фреймворка и/или ORM для обработки этих вещей за вас.

person Chris Tierney    schedule 28.04.2015