为了注销用户,我总是使用以下行: cfset structClear(SESSION)cfcookie name="CFID" value="" expires="NOW"cfcookie name="CFTOKEN" value="" expires="NOW" 它会在运行时清除会话中保留的数据,并重置/更新CFID和CFTOK
<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的服务器设置,并且未检查使用ColdFusion标签/功能禁用更新ColdFusion内部cookie的属性.
这个奇怪的案子可以帮助我吗?
在ColdFusion 10中,您可以使用sessionInvalidate()来完成此任务.您也不必担心删除cookie.