Coldfusion 如何重置会话变量

Coldfusion 如何重置会话变量,coldfusion,Coldfusion,我正在开发一个应用程序。在CF10中。已决定此应用程序。将通过在dot net应用程序中创建的链接打开。 用户通过dot net应用程序登录和注销以查看链接。当用户单击该链接时,他们可以访问CF应用程序 这个链接传递一个用户id,我正在使用这个用户id创建session.userid 在onSessionStart at application.cfc中: <cfset session.userid = #Trim(URL.userid)#> 问题是,当我以其他用户身份注

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

这个链接传递一个用户id,我正在使用这个用户id创建session.userid 在onSessionStart at application.cfc中:

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

问题是,当我以其他用户身份注销并重新登录时,我以前的session.userid仍然存在。所以我有两个不同的session.userid 为了避免这种情况,我认为我可以采取以下措施:

在onSessionStart at application.cfc中,我从SessionValidate函数开始:

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

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

如果我不能用这种逻辑来处理我的情况,那么最好的方法是什么。 我应该重新设置session.userid index.cfm吗?

onApplicationStart()
仅在应用程序第一次运行时运行。您应该在注销过程中运行
。如果运行正确,则不应该存在由前一个用户ID定义的ColdFusion会话变量

您肯定不需要在
onSessionStart()
的顶部运行它。该函数完全按照它的名称执行:“在新会话启动时运行这些进程”

阅读更多

您可以这样结束会话:

<cfset StructClear(Session)>
或者,如果您使用的是J2EE会话:

<cfset getPageContext().getSession().invalidate()>
尽管如此,我确信第一个示例本质上就是
sessionInvalidate()
所做的


此外,此应用程序是否只能通过您的内部网络访问?所以只有你公司的人才能访问它?如果没有,您需要考虑实施一个更强大的单点登录过程,以便从您的其他站点桥接对此过程的访问。

按照我的注销顺序,我运行两个单独的会话销毁程序。这样我就知道会话被破坏了

<cfset structClear( session ) />
<cfset sessionInvalidate()/>

我正在运行CF11,当我的客户从我的web应用程序中注销时,它运行得非常好


至于CFLOCK,取决于您的CF版本,将取决于您是否使用它。它在CF11中被贬值了,当我去CF11时,它破坏了我的应用程序。

当用户单击该链接时,他们可以访问CF应用程序,与您的问题无关,但我希望CF登录过程涉及的不仅仅是一个简单的URL变量。否则,任何用户只需修改URL即可将链接添加到书签中,并以任何ID登录。如果您不介意,请允许我问两个问题,第一个问题是,我们是否仍在使用cflock创建会话,因为我发现了许多博客,例如Ray Camden就是其中之一。它说在CFMX之后,会话上的cflock不再是必需的。我现在很困惑。第二个问题是如何知道我是否在使用J2EE会话?有办法检查吗?可能不需要Cblock。只有在CF Admin中打开J2EE会话,您才能使用它们。好的,谢谢!顺便说一下,这是一个intranet站点,用户在我们的机构内。启用了使用J2EE会话变量和启用会话变量。那么,用它来清除会话变量就足够了吗?@user3779216-使用structClear有一些限制。查看以了解差异。