ColdFusion如何在内部管理SESSION?

时间:2013-12-29 08:51:01

标签: session coldfusion coldfusion-9

使用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如何维护会话?

如前所述,我每次都在考虑ColdFusion服务器检查请求头中发送的cfid和cftoken,会话范围内存在cfid和cftoken以维持会话。但我认为我错了,因为在会话中没有cfid和cftoken范围也Coldfusion继续保持SESSION。

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

1 个答案:

答案 0 :(得分:4)

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

然而,CFIDCFTOKEN Cookie 执行将浏览器与会话相关联(因为浏览器和CFML服务器都是如此(通过HTTP请求)和Web服务器)可以访问cookie。

因此,如果CFML服务器收到具有某个CFID / CFTOKEN组合的cookie,它将尝试对关联的会话进行罚款。会议范围的副本只是为了方便起见,我不会认为它们之外的任何目的。

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

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

也可以通过SessionTracker进行会话,我会留给你谷歌,因为它不在你的问题范围内,并且正在加入ColdFusion内部(如果Railo有相同的话,我不知道)。 / p>

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