onSessionEnd, по-видимому, не запускается

#coldfusion

#coldfusion

Вопрос:

У меня есть ВСТАВКА В файл журнала в onSessionStart и ОБНОВЛЕНИЕ в onSessionEnd. Я протестировал это вручную, вызвав onSessionEnd из другого места в Application.cfc, поэтому я знаю, что это работает.

Но это единственный раз, когда он когда-либо запускался.

Интересно, никогда ли не запускается onSessionEnd.

Комментарии:

1. Какая версия CF? Вы пробовали уменьшить время ожидания сеанса и запустить сеанс и выполнить простой <cflog /> в onSessionEnd, чтобы проверить, вызывается ли он?

2. Пожалуйста, опубликуйте свой код из onSessionEnd()

3. Пожалуйста, опубликуйте свой Application.cfc код.

4. Возможно, он запущен, но выдает ошибку, поскольку у onSessionEnd потенциально может не быть доступа к переменным, которые вы используете. Как говорили другие, опубликуйте свой код, и мы посмотрим. Также добавьте туда <cflog /> тег, чтобы посмотреть, сможете ли вы получить данные в журналы ColdFusion.

Ответ №1:

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

Прежде всего, вам нужно помнить, что если вы вызываете onSessionEnd напрямую, он вызывается в обычном контексте запроса. Это означает, что у него есть доступ к переменным, к которым у него обычно не будет доступа, если он вызывается во время обычного завершения сеанса. Это означает, что тестирование «вручную путем вызова onSessionEnd» не является допустимым способом тестирования метода.

С этой целью единственным способом надежной отладки onSessionEnd метода является разумное использование cflog тега. Вам нужно добавить записи cflogдля пометки при запуске метода, вам нужно иметь перехват ошибок, чтобы регистрировать ошибки или выгружать cfcatch области видимости в файл для проверки. Вам также необходимо убедиться, что все, на что вы ссылаетесь в методе, передается через аргументы SessionScope и ApplicationScope , и что вы не ссылаетесь ни на какие области, отличные от Arguments и Server . См. livedocs для справки.

Надеюсь, это поможет вам найти источник вашей проблемы.

Комментарии:

1. О! Спасибо Дэну (и всем) за комментарии! Я использовал переменную сеанса, и мне нужно было использовать переменную sessionScope. Еще раз спасибо!

Ответ №2:

Я бы добавил, что вы даже не можете вызывать другие функции Application.cfc из метода onSessionEnd .