ColdFusion SessionTracker并强制会话结束

时间:2013-02-02 15:04:24

标签: session coldfusion coldfusion-9

我正在使用ColdFusion 9 coldfusion.runtime.SessionTracker使用以下代码监控当前登录的用户。

app = application.getApplicationSettings().name;
sessiontracker = createObject("java","coldfusion.runtime.SessionTracker");
sessionCollection = sessionTracker.getSessionCollection(app);

返回struct jsessionidjsessionid以及所有当前活动会话的会话变量。

是否有可能强制会话结束,因为{{1}}有效地迫使用户退出?

谢谢,

理查德

2 个答案:

答案 0 :(得分:2)

因此,当用户登录时,我在其会话中设置了user结构,以便删除其登录状态。使用sessionTracker我可以获取特定用户的会话,只删除当前会话中的user结构。

app = application.getApplicationSettings().name;
sessiontracker = createObject("java","coldfusion.runtime.SessionTracker");
sessionCollection = sessionTracker.getSessionCollection(app);

userSession = sessiontracker.getSession(app, sessionID));

structDelete(userSession, "user");

不确定这是否是最佳方式,但它似乎对我有用。希望它能帮到人们。

答案 1 :(得分:0)

您是否尝试过在application.cfc中使用onSessionEnd?因为我们可以在注销过程中手动触发它,或者如果用户关闭浏览器或者其工作正常,它将自动触发。这就是我们使用它的方式。

在application.cfc中,我们触发onSessionEnd并触发logout函数,该函数也在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>

希望这有帮助