我有应该在 session 结束时运行的查询。如果有与用户帐户相关联的记录,那么我想删除该记录。我使用 session 范围来存储用户 ID。一旦用户手动注销或他们的 session 超时,此查询应该运行。这是示例:
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 session 。以下是用户手动注销时结束 session 的方式:
<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 结束时无法实现。
最佳答案
session
范围在内部不可用 OnSessionEnd() .您必须改用参数名称,即 arguments.sessionScope
However, if user logs out manually then onSessionEnd is not triggered. Do you know if it's possible to manually trigger onSessionEnd int [t]hat case?
从技术上讲是的,尽管将注销逻辑放在组件中然后从两个位置(OnSessionEnd 和手动注销脚本)调用适当的方法可能更有意义。
关于session - 如何在 session 结束时运行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52046264/