ColdFusion onSessionEnd проблема - PullRequest
1 голос
/ 15 июня 2011

Я прочитал много сообщений от людей, у которых проблемы с onSessionEnd.Это мое первое преобразование application.cfm в application.cfc, и onSessionEnd не работает с CFFunction, которую я пытаюсь вызвать.

Я думаю, что зависает, как правильно вызвать компонент из /Папка lib / components /, где она находится.

Когда пользователь входит в систему, я создаю массив сеансов, который отслеживает jobNumber и last_completed_step в этом задании.В сеансе пользователя есть несколько заданий.В конце сеанса я хочу записать обновленные данные массива обратно в БД.

Я должен дать понять, что в настоящее время я просматриваю свой файл журнала и вижу, что сеанс запущен - как закодировано вonSessionStart показано ниже.Кроме того, onSessionEnd также записывает в файл журнала, когда я вынимаю вызов компонента.Другими словами, если я просто скажу это, чтобы написать «Сессия закончилась».в файл журнала я увижу его в файле журнала.Я установил текущее время ожидания сеанса в CF Administrator и моем app.cfc на 3 минуты для тестирования.

Если я вызываю метод giveMeAnswer в jobState.cfc из отдельного файла (также на корневом уровне)метод giveMeAnswer работает должным образом и возвращает значение «Я являюсь CFC».

Если я переместлю jobState.cfc на корневой уровень и установлю для атрибута компонента значение «jobState», я также получу возврат изкомпонент.

<!--- Runs when your session starts --->
<cffunction name="onSessionStart" returnType="void" output="false">

<!--- :: invoke all session variables | moved out of on session start  :: --->
<cfinvoke component="#application.virtualPaths.cfcPath#system/sessionVars" method="init" />

<cflog file="#This.Name#" type="Information" text="Session started.">

</cffunction>

<!--- Runs when session times out --->

<cffunction name="onSessionEnd" returntype="void">
<cfargument name="SessionScope" type="struct" required="true" />
<cfargument name="ApplicationScope" type="struct" required="true" />

<cfinvoke component="/lib/components/jobState" method="giveMeAnswer" returnvariable="returnFromCfc">
</cfinvoke>

<cflog file="#This.Name#" type="Information" text="Session ended.  #returnFromCfc#">

<cfreturn />
</cffunction>

Итак, это просто не найти компонент?Есть еще идеи?

Большое спасибо, Джерри

1 Ответ

3 голосов
/ 15 июня 2011

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

component = "lib.components.jobstate"

и убедиться, что lib является либо подкаталогом, либо известным CF-отображением, которое указывает на libпапка.

...