我正在开发一款应用。在CF10中。已经决定了这个应用程序。将通过点网应用程序中创建的链接打开。 用户登录&通过点网应用程序以查看链接。当用户点击该链接时,他们可以访问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.userid index.cfm吗?
答案 0 :(得分:2)
onApplicationStart()
仅在第一次运行应用程序时运行。您应该在注销过程中运行sessionInvalidate()
。如果运行正确,则不应存在由先前用户标识定义的ColdFusion会话变量。
您绝对不需要在onSessionStart()
的顶部运行它。该功能完全按照其命名的方式执行:&#34;在新会话启动时运行这些流程&#34;。
了解更多in the CF 10 docs。
你可以结束这样的会议:
<cfset StructClear(Session)>
如果你正在使用J2EE会话,那么或者像这样:
<cfset getPageContext().getSession().invalidate()>
虽然,我确信第一个例子基本上是sessionInvalidate()
所做的。
此外,此应用程序是否只能通过内部网络访问?那么只有贵公司的人才能访问它?如果没有,您需要考虑实施更强大的单一登录流程,以便从其他站点桥接对此协议的访问。
答案 1 :(得分:2)
使用我的注销序列,我运行2个单独的会话驱逐舰。这样我知道会话被破坏了。
<cfset structClear( session ) />
<cfset sessionInvalidate()/>
我正在运行CF11,当我的客户退出我的网络应用程序时,这非常有效。
至于CFLOCK,取决于您的CF版本将取决于您是否使用它。它已经在CF11中被折旧了,当我去CF11时,它已经破坏了我的应用程序。