Session ColdFusion如何在内部管理会话?

Session ColdFusion如何在内部管理会话?,session,coldfusion,coldfusion-9,Session,Coldfusion,Coldfusion 9,使用Coldfusion会话(不是J2EE)时, 不结束会话,它删除CFID、CFTOKEN和SESSIONID,但不删除URLTOKEN 在随后的请求中,它不会启动新会话并继续维护旧会话 (解释如下:) 我的问题是,如果会话范围中没有CFID和CFTOKEN,Coldfusion如何维护会话 如前所述,每次ColdFusion服务器检查请求头中发送的cfid和cftoken时,会话作用域中存在cfid和cftoken以维护会话。但我认为我错了,因为会话作用域中没有cfid和cftoken,Co

使用Coldfusion会话(不是J2EE)时,
不结束会话,它删除
CFID、CFTOKEN和SESSIONID
,但不删除
URLTOKEN

在随后的请求中,它不会启动新会话并继续维护旧会话

(解释如下:)

我的问题是,如果会话范围中没有
CFID和CFTOKEN
,Coldfusion如何维护会话

如前所述,每次ColdFusion服务器检查请求头中发送的cfid和cftoken时,会话作用域中存在cfid和cftoken以维护会话。但我认为我错了,因为会话作用域中没有cfid和cftoken,ColdFusion也会继续维护会话


因此,ColdFusion如何在内部管理会话,我的意思是它如何决定继续使用旧会话或创建新会话?

会话变量
CFID
CFTOKEN
显然(?)不能用于将浏览器与会话关联,因为它们位于会话中。他们必须有自知之明才行

但是,
CFID
CFTOKEN
cookies确实将浏览器与会话相关联(因为浏览器和CFML服务器(通过HTTP请求和web服务器)都可以访问cookies)

因此,如果CFML服务器接收到带有某个
CFID
/
CFTOKEN
组合的Cookie,它将尝试对相关会话进行优化。这些会话范围副本只是为了方便起见,我认为它们没有任何用途

如果浏览器发送的
CFID
/
CFTOKEN
组合在服务器内存中没有相应的会话,服务器将启动一个新会话,但出于安全考虑,我认为它也将设置一个新的
CFID
/
CFTOKEN
对(不过,您最好测试一下)

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

你也可以通过SessionTracker来处理会话,我将把它留给google,因为它实际上不在你的问题范围之内,并且是在选择ColdFusion内部(我不知道Railo是否有类似的工具)

在研究这一点时,需要记住的一点是,两种方法都不能清除会话范围
运行
onSessionEnd()
也不会导致会话结束。我在我的博客文章中对此进行了观察。

会话变量
CFID
CFTOKEN
显然(?)不能用于将浏览器与会话关联,因为它们在会话中。它们必须自我感知才能工作

但是,
CFID
CFTOKEN
cookies确实将浏览器与会话相关联(因为浏览器和CFML服务器(通过HTTP请求和web服务器)都可以访问cookies)

因此,如果CFML服务器接收到带有某个
CFID
/
CFTOKEN
组合的Cookie,它将尝试对相关会话进行优化。这些会话范围副本只是为了方便起见,我认为它们没有任何用途

如果浏览器发送的
CFID
/
CFTOKEN
组合在服务器内存中没有相应的会话,服务器将启动一个新会话,但出于安全考虑,我认为它也将设置一个新的
CFID
/
CFTOKEN
对(不过,您最好测试一下)

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

你也可以通过SessionTracker来处理会话,我将把它留给google,因为它实际上不在你的问题范围之内,并且是在选择ColdFusion内部(我不知道Railo是否有类似的工具)

在研究这一点时,需要记住的一点是,两种方法都不能清除会话范围
运行
onSessionEnd()
也不会导致会话结束。我在我的博客文章中对此进行了观察。

是否
CFID和CFTOKEN
存储在服务器内存中?如果不是,Coldfusion如何将会话与请求头中接收到的CFID和CFTOKEN相关联。“为了安全起见,我认为它还将设置一个新的CFID/CFTOKEN对"是的,ACF自2011年2月的会话修复热修复以来就一直在这样做。请参阅Deepak,它将存储这些值与会话对象之间的一些关联,是的。否则它将如何工作?和@CFSimply:感谢您的澄清。
CFID和CFTOKEN
是否存储在服务器内存中?如果不是,Coldfusion如何将会话与在请求头中输入接收到的cfid和cftoken。“为了安全起见,我认为它还将设置一个新的cfid/cftoken对”是的,ACF自2011年2月的会话修复热修复程序以来一直在这样做。请参阅Deepak,它将存储这些值与会话对象之间的一些相关性,是的。否则它将如何工作?和@CFSimply:感谢您的澄清。如果您确实想删除会话,并且正在使用ColdFusion 10,则可以使用新的
SessiononInvalidate()
函数。它将清除会话作用域并使服务器上的CFID、CFTOKEN值无效。但是,请记住,如果您使用J2EE会话,它将不起作用。是的,我尝试过,
sessionInvalidate()
在调用
onSessionEnd()时工作正常
结束会话。如果确实要删除会话并且使用ColdFusion 10,则可以使用新的
SessionInvalidate()
函数。它将清除会话范围并使服务器上的CFID、CFTOKEN值无效。但是,请记住,如果使用J2EE会话,它将不起作用。是的,我尝试过,
sessionInvalidate()
在调用
onSessionEnd()时工作正常