删除 coldfusion 服务器上的所有会话

Delete all sessions on a coldfusion server

有没有办法删除 coldfusion 服务器上特定应用程序的所有当前会话。我想强制所有用户更新他们的会话变量并添加新的会话变量。

我想到了

<Cfset applicationStop()>

但我不确定它是否会删除所有会话。即便如此,如果确实如此,我仍然需要阻止它删除所有应用程序的所有会话。我只想清除 1 个应用程序的所有会话并强制为该 website/application.

上的所有用户执行 OnSessionStart(在 application.cfc 中)

我没有使用单一登录方法,然后对每个应用程序使用单独的 Application.cfm。

当您注销一个应用程序时,只有一个应用程序会话将结束。

我无法添加此评论,因为我没有权限。

下面是 Application.cfc 的一个片段,可以让您重置应用程序的所有会话变量。 控制变量是application.loaded。您需要提供代码来更改此变量的值以强制重新加载会话。 当您的代码将 application.loaded 设置为 now() 时,它将有一个 date/time 更新于session.loaded,它将重置用户会话。本版本采用CF2016级CFML编写。

此代码更像是一个模板,您必须为实施进行修改。

Application.cfc:

component displayname="myApp" {
    this['Name'] = "myApp";
    this['ApplicationTimeout'] = CreateTimeSpan(0, 12, 0, 0);
    this['sessionTimeout'] = CreateTimeSpan(0, 0, 45, 0);
    this['SessionManagement'] = true;
    this['ClientManagement'] = false;
    this['SetClientCookies'] = true;

    public boolean function onApplicationStart() {
        // app variable for session scope refresh
        application['loaded'] = now();

        return true;
    } // onApplicationStart()

    public void function onSessionStart() {
        // this individual session loaded flag
        session['loaded'] = now();

        return;
    } // onSessionStart()

    public boolean function onRequestStart(required string targetPage) {
        // if the applicaiton.loaded variable is more recent, force this session to be reset
        if (application.keyExists("loaded") && session.keyExists("loaded") && application.loaded > session.loaded) {

            // pick one or more of these FOUR options to reset the session.

            // call the J2EE method of invalidating a session
            getPageContext().getSession().invalidate();

            // OR use the CF method
            sessionInvalidate();

            // OR clear the session struct
            session.clear();

            // OR clear important session variables that tell your app that the user is logged out, this will need to change based on YOUR implementation
            session['user'] = "";

            // if you clear the session with a form of invalidate(); onSessionStart() should be called to reset the session.loaded var.  It can also be set here.
            session['loaded'] = now();

            // redirect to the target page, which should send the user back to the login page because the session was reset
            location(url=arguments.targetPage, addtoken=false);
        }

        return true;
    } // onRequestStart()

} // component

当我为网站构建这种系统时,一个奇怪的地方是;尽管调用了 applicationStop(),但会话并未清除。您可能认为会话会在应用程序停止时被销毁,但事实并非如此。这就是我构建此方法的原因。会话似乎与各个站点的 cookie 相关联,并且独立于它们可能存在的应用程序。