为了注销用户,我总是使用以下几行:
<cfset structClear(SESSION)>
<cfcookie name="CFID" value="" expires="NOW">
<cfcookie name="CFTOKEN" value="" expires="NOW">
它在运行时清除会话中保存的数据并重置/更新 CFID 和 CFTOKEN。它仍然可以在我们的旧服务器(ColdFusion 8)上运行,但它不再适用于我们的新服务器(ColdFusion 10)。此尝试在 ColdFusion 10 中失败的原因相当简单:每当我尝试覆盖 CFID 或 CFTOKEN(带有<cfcookie>
)时,cookie 都会放在顶级域中,例如:
Cookie set via <cfcookie> on ColdFusion 10:
domain: .myserver.com
而 ColdFusion 将其会话 cookie 放在实际的(子)域上:
Generated CFID/CFTOKEN by ColdFusion 10:
domain: mywebsite.myserver.com
有趣的是:如果我设置如下:
<cfcookie name="TEST" value="..." expires="NEVER">
cookie 正确设置为:
domain: mywebsite.myserver.com
我可以使用以下方法轻松清除 cookie:
<cfcookie name="TEST" value="" expires="NOW">
我尝试使用域属性,但是:
<cfcookie name="CFID" value="" domain="mywebsite.myserver.com" expires="NOW">
总是以:
domain: .mywebsite.myserver.com
(注意前面的点),因此不被识别为同一个 cookie。
另一个奇怪的事情是,使用:
<cfcookie name="CFID" value="" expires="NOW">
不仅会生成带有错误域的 cookie,而且会保留而不是因为过期而被删除。
我检查了 ColdFusion 10 机器上 cookie 的服务器设置,Disable updating ColdFusion internal cookies using ColdFusion tags/functions
但未检查该属性。
谁能帮我解决这个奇怪的情况?