使用Coldfusion会话(而不是J2EE)时,<cfset StructClear(Session)>
不会结束会话,它会删除CFID,CFTOKEN and SESSIONID
,但不会删除URLTOKEN
。
在后续请求中,它不会启动新的SESSION并继续维护旧会话。
我的问题是,现在SESSION范围内没有CFID and CFTOKEN
范围Coldfusion如何维护会话?
如前所述,我每次都在考虑ColdFusion服务器检查请求头中发送的cfid和cftoken,会话范围内存在cfid和cftoken以维持会话。但我认为我错了,因为在会话中没有cfid和cftoken范围也Coldfusion继续保持SESSION。
那么ColdFusion如何在内部管理SESSION,我的意思是它决定如何继续旧会话或创建一个新会话?
答案 0 :(得分:4)
会话变量CFID
和CFTOKEN
显然(?)不能用于将浏览器与会话相关联,因为它们在会话中。为了工作,他们必须要有自我意识。
然而,CFID
和CFTOKEN
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”中对此进行了观察。