coldfusion - 如何重置 session 变量

标签 coldfusion

我正在开发一个应用程序。在 CF10 中。已经决定这个应用程序。将通过在点网应用程序中创建的链接打开。 用户通过 dot net 应用程序登录和注销以查看链接。当用户单击该链接时,他们可以访问 CF 应用程序。

此链接传递一个用户 ID,我正在使用此用户 ID 创建 session.userid 在 application.cfc 的 onSessionStart 中:

  <cfset session.userid = #Trim(URL.userid)#> 

问题是,当我注销并以不同的用户身份重新登录时,我之前的 session.userid 仍然存在。所以我有两个不同的 session.userids 为了避免这种情况,我认为我可以执行以下操作:

在 application.cfc 的 onSessionStart 中,我从 sessionIvalidate 函数开始:

   <cfset sessionInvalidate() />
   <cfset session.userid = #Trim(URL.userid)#>

我认为每次应用程序启动 application.cfc ColdFsuion 都必须运行 application.cfc 然后 sessionInvalidate 函数将清除现有的 session.userid 然后创建一个新的,所以如果我以不同的用户身份登录和注销同一台计算机然后应用程序仍然维护一个 session.userid。 但不幸的是,这种方法不起作用!我仍然得到旧 session ,但未创建新 session !

如果我无法使用此逻辑来解决问题,那么针对我的情况的最佳方法是什么? 我应该重新设置 session.userid index.cfm 吗?

最佳答案

onApplicationStart()仅在应用程序第一次运行时运行。你应该运行 <a href="https://wikidocs.adobe.com/wiki/display/coldfusionen/SessionInvalidate" rel="noreferrer noopener nofollow">sessionInvalidate()</a>作为注销过程的一部分。如果运行正确,则应该没有由先前用户 ID 定义的 ColdFusion session 变量。

您绝对不需要在onSessionStart() 的顶部运行它.该函数的作用与它的名称完全相同:“在新 session 启动时运行这些进程”。

阅读更多 in the CF 10 docs .

你可以这样结束 session :

<cfset StructClear(Session)>

或者如果您使用的是 J2EE session ,则像这样:

<cfset getPageContext().getSession().invalidate()>

尽管如此,我确定第一个示例本质上就是 sessionInvalidate()

此外,此应用程序是否只能通过您的内部网络访问?那么只有贵公司的人才能访问它吗?如果没有,您需要考虑实现更强大的单点登录流程,以桥接从您的其他站点访问该流程。

关于coldfusion - 如何重置 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654700/

相关文章:

xml - 如何在 Coldfusion 中将数组添加到 XML 对象?

javascript - 将城市/州从 SQL Server 加载到 Google map ?

mysql - 不止一个 WHERE 条件导致错误 : You have an error in your SQL syntax;

regex - Coldfusion 正则表达式生成 slug

coldfusion - ColdFusion cfc 方法可以确定自己的名称吗?

coldfusion - Fusebox 4/5 中的面包屑

coldfusion - 尝试学习 ColdFusion 但无法访问管理员

mysql - CFWheels - 使用 save() 方法插入记录时出错

sql - 将 Firebird 数据库中的 DOUBLE 列转换为 TIMESTAMP

sql-server-2008 - 锁定用户记录并防止编辑?