【问题标题】:How ColdFusion manages a SESSION internally?ColdFusion 如何在内部管理 SESSION?
【发布时间】:2013-12-29 08:51:00
【问题描述】:

在使用 Coldfusion 会话(不是 J2EE)时,<cfset StructClear(Session)> 不会结束会话,它会删除CFID,CFTOKEN and SESSIONID,但不会删除URLTOKEN

在后续请求中,它不会启动新的 SESSION 并继续保持旧的会话。

(解释于:http://www.bennadel.com/blog/1846-Clearing-The-Session-Scope-Does-Not-End-Your-ColdFusion-Session.htm

我的问题是,现在在 SESSION 范围内没有CFID and CFTOKEN Coldfusion 如何维护 SESSION?

就像以前我想的那样,每次 ColdFusion 服务器检查请求标头中发送的 cfid 和 cftoken 以及会话范围中存在的 cfid 和 cftoken 以维护会话。但我认为我错了,因为会话中没有 cfid 和 cftoken范围也 Coldfusion 继续保持 SESSION。

那么 ColdFusion 如何在内部管理会话,我的意思是它如何决定继续旧会话还是创建新会话?

【问题讨论】:

  • 如果你真的想删除一个会话并且你正在使用 ColdFusion 10,你可以使用新的SessionInvalidate() 函数。它将清除会话范围并使服务器上的 CFID、CFTOKEN 值无效。但是,请记住,如果您使用的是 J2EE 会话,它将不起作用。
  • 是的,我试过了,sessionInvalidate() 工作正常,因为它调用onSessionEnd() 来结束会话。

标签: session coldfusion coldfusion-9


【解决方案1】:

会话变量CFIDCFTOKEN 显然(?) 不能用于将浏览器与会话相关联,因为它们 会话中。他们必须有自我意识才能发挥作用。

但是CFIDCFTOKEN cookies 将浏览器与会话相关联(因为浏览器和 CFML 服务器(通过 HTTP 请求和 Web 服务器)可以访问 cookie。

因此,如果 CFML 服务器接收到带有特定 CFID/CFTOKEN 组合的 cookie,它将尝试处理关联的会话。这些会话范围的副本只是为了方便起见,我不认为它们有除此之外的任何目的。

如果浏览器发送的CFID/CFTOKEN组合在服务器内存中没有对应的会话,服务器会启动一个新的会话,但我认为它也会设置一个新的CFID/@ 987654332@ 对也是为了安全起见(不过你最好测试一下)。

服务器管理会话到期,这完全基于在 CF 实例(通过 CFAdmin)或应用程序(通过 Application.cfc)上设置的会话超时。

人们也可以通过 SessionTracker 来处理会话,我将把它留给谷歌,因为它实际上不在你的问题范围内,并且正在选择 ColdFusion 内部(我不知道 Railo 是否有等效的)。

调查时要记住的一件事是,既不清除会话范围 运行onSessionEnd() 也不会导致会话结束。我在我的博客文章“The difference between events and event handlers”中对此进行了观察。

【讨论】:

  • CFID and CFTOKEN是否存储在服务器内存中?如果不是,Coldfusion 如何将会话与请求标头中收到的 cfid 和 cftoken 关联起来。
  • “为了安全起见,我认为它也会设置一个新的 CFID/CFTOKEN 对” 是的,自 2 月的 Session Fixation 热修复以来,ACF 一直在这样做2011. 见cfsimplicity.com/4/…
  • Deepak 它将存储这些值和会话对象之间的一些相关性,是的。它还能如何工作?还有@CfSimplicity:感谢您的澄清。
猜你喜欢
  • 2014-03-31
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多