我在某个域example.com上设置了ColdFusion 9应用程序, 另一个在子域上设置,subdomain.example.com。
在Application.cfc上,两个应用都启用了会话管理,并且特定于主机(不是特定于域)的cookie:
SessionManagement = true;
SetDomainCookies = false;
使用IE时,首次访问 example.com 会设置一对 CFID; CFTOKEN 。但是,如果未指定cookie的DOMAIN属性(Internet Explorer Cookie FAQ, Q3),IE将这些cookie发送到所有嵌套子域是一种已知行为。
不幸的是,SESSION范围就是这种情况。以下屏幕截图证明了发送到IE或从IE发送的cookie没有设置域属性:
这会导致意外行为,因为subdomain.example.com上的应用程序将收到两对不同的CFID和CFTOKEN(来自example.com和subdomain.example.com)。 ColdFusion会将此解释为来自浏览器的无效答案,并将生成一对新的令牌,从而完成前一个会话。
我能想到的一个解决方案是用CFCOOKIE替换SESSION的功能,总是指定域,例如。 <cfcookie name="foo" value="bar" domain="#CGI.SERVER_NAME#" />
还有其他解决方案吗?
或者为SESSION范围设置的cookie指定域的方法?