У меня есть запрос, который должен выполняться в конце сеанса. Если есть запись, которая связана с учетной записью пользователя, я хотел бы удалить эту запись. Я использую сессионный объем для хранения идентификаторов пользователей. Как только пользователь выходит из системы или время сеанса истекло, этот запрос должен быть запущен. Вот пример:
public void function onSessionEnd(required struct sessionScope, struct applicationScope={}) {
local.qryTest = new Query();
local.qryTest.setDatasource("#arguments.Application.dsnWriteDelete#");
local.qryTest.setSQL("DELETE Locked WHERE RecID = :RecID");
local.qryTest.addParam(name="RecID",value="#SESSION.userID#",cfsqltype="cf_sql_integer");
qryTest.execute();
return;
}
Я использую сеансы J2EE в своем приложении. Вот как я заканчиваю сеанс, когда пользователь выходит из системы вручную:
<cffunction name="LogOut" access="remote" output="yes" returnformat="JSON">
<cfset local.fnResults = structNew()>
<cfif structKeyExists(SESSION.AccountInfo, "AccountID")>
<cftry>
<cfset local.temp = getPageContext().getSession().invalidate()>
<cfset local.fnResults = {status : "200"}>
<cfcatch type="any">
<cfset local.fnResults = {status : "400", message : "Error! Please contact your administrator."}>
</cfcatch>
</cftry>
<cfelse>
<cfset local.fnResults = {status : "400", message : "Error! Please contact your administrator."}>
</cfif>
<cfreturn fnResults>
</cffunction>
Я не уверен, что onSessionEnd работает по-другому с J2EE, но код, который я выше, никогда не удаляет записи из таблицы базы данных. Я не уверен, что в моем коде что-то не так или это невозможно сделать в конце сеанса.