У меня есть запрос, который должен выполняться в конце сеанса. Если есть запись, привязанная к учетной записи пользователя, я хотел бы удалить эту запись. Я использую область сеанса для хранения идентификаторов пользователей. После того, как пользователь вручную выйдет из системы или время его сеанса истечет, этот запрос должен быть запущен. Вот пример:
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, но код, который у меня есть выше, никогда не удаляет записи из таблицы базы данных. Я не уверен, что что-то не так в моем коде или это невозможно достичь в конце сеанса.
session
недоступен. Вместо этого вы должны использовать имя аргумента, т.е.arguments.sessionScope
- person SOS   schedule 27.08.2018onSessionEnd
не срабатывает. Знаете ли вы, можно ли вручную вызватьonSessionEnd
int hat case? - person espresso_coffee   schedule 27.08.2018