删除 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 相关联,并且独立于它们可能存在的应用程序。
有没有办法删除 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 相关联,并且独立于它们可能存在的应用程序。