如何在会话结束时运行查询?
How to run query on session end?
我有一个查询应该在会话结束时 运行。如果有与用户帐户相关联的记录,那么我想删除该记录。我使用会话范围来存储用户 ID。一旦用户手动注销或他们的会话超时,此查询应该 运行。这是示例:
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 的工作方式是否有任何不同,但我上面的代码从不删除数据库中的记录 table。我不确定我的代码是否有问题,或者这不可能在会话结束时实现。
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 和手动注销脚本)调用适当的方法可能更有意义。
我有一个查询应该在会话结束时 运行。如果有与用户帐户相关联的记录,那么我想删除该记录。我使用会话范围来存储用户 ID。一旦用户手动注销或他们的会话超时,此查询应该 运行。这是示例:
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 的工作方式是否有任何不同,但我上面的代码从不删除数据库中的记录 table。我不确定我的代码是否有问题,或者这不可能在会话结束时实现。
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 和手动注销脚本)调用适当的方法可能更有意义。