ColdFusion SessionTracker并强制结束会话
我使用ColdFusion 9ColdFusion SessionTracker并强制结束会话,session,coldfusion,coldfusion-9,Session,Coldfusion,Coldfusion 9,我使用ColdFusion 9ColdFusion.runtime.SessionTracker来监视当前登录的用户,使用以下代码 app = application.getApplicationSettings().name; sessiontracker = createObject("java","coldfusion.runtime.SessionTracker"); sessionCollection = sessionTracker.getSessionCollection(app)
ColdFusion.runtime.SessionTracker
来监视当前登录的用户,使用以下代码
app = application.getApplicationSettings().name;
sessiontracker = createObject("java","coldfusion.runtime.SessionTracker");
sessionCollection = sessionTracker.getSessionCollection(app);
它返回所有当前活动会话的jsessionid
的struct
,以及会话变量
如果我有jsessionid
有效地强制用户注销,是否可以强制会话结束
谢谢
Richard您是否尝试过在application.cfc中使用onSessionEnd?因为我们可以在注销过程中手动启动它,或者在用户关闭浏览器或其他功能正常的情况下自动启动。这就是我们使用它的方式 在application.cfc中,我们启动onSessionEnd,它启动同样在application.cfc中的注销功能,并执行所有清洁工作和日志记录
<cffunction name="OnSessionEnd" access="public" returntype="void"
output="false" hint="Fires when the session is terminated.">
<cfargument name="SessionScope" type="struct" required="true" />
<cfargument name="ApplicationScope" type="struct"
required="false" default="#StructNew()#" />
<cfargument name="timedOut" type="boolean" required="false" default="true">
<cfinvoke thisSessionScope="#SessionScope#"
timedOut="#arguments.timedOut#" method="logout">
</cfinvoke>
<cfset structClear(arguments.sessionScope) >
<!--- Return out. --->
<cfreturn />
</cffunction>
希望这有助于所以当用户登录时,我会在他们的会话中设置一个
用户
结构,以便删除他们的登录状态。使用sessionTracker
我可以获得特定用户的会话,只需删除当前会话中的user
结构即可
app = application.getApplicationSettings().name;
sessiontracker = createObject("java","coldfusion.runtime.SessionTracker");
sessionCollection = sessionTracker.getSessionCollection(app);
userSession = sessiontracker.getSession(app, sessionID));
structDelete(userSession, "user");
不确定这是否是最好的方法,但它似乎对我有效。希望它能帮助人们。您能详细说明您需要这样做的原因吗?有很多关于结束会话的博客条目。根据您的需要,可能有比使用内部类更好的选项。但要回答您的问题,请转储SessionTracker对象。有一个
cleanUp(appName,sessionID)
方法可以做到这一点。虽然我自己从来没有用过,但很抱歉我的回复太晚了,我只是想重新开始这个项目。我已转储SessionTracker对象,但没有清理(appName,sessionID)
方法。不,它在那里。它被列为cleanup(java.lang.String,java.lang.String)
。第一个参数是应用程序名称,第二个参数是会话ID。不确定要查看的位置,请参阅此处以获取SessionTracker
对象的转储。您正在运行ColdFusion 10吗?对于任何发现此问题并尝试在CF10及更高版本中运行它的人,您可能会发现第一行代码不起作用。您可以改为使用:app=getapplicationmetadata().name;如果你逐字逐句地回答这个问题,他是在试图迫使会议结束。OnSessionEnd在实际发生之前不会运行。当然,在他问的和他真正想要的之间可能存在差异。比如在onSessionEnd(他说他有会话id)中?我从来没有理由去尝试。很抱歉我的回复太晚了,只是刚刚开始着手这个项目。我已经找到了一种手动调用事件处理程序onSessionEnd()
的方法。然而,我发现了一种使用户登录状态无效的非常简单的方法。请参阅答案。当我的网站安装在Windows 2003上时,这非常有效。现在,尝试将它们移动到Windows 2008R2,cleanup()方法消失,并尝试将会话分配给变量,这将导致500服务器错误。