Ale*_*lex 3 cookies coldfusion session-cookies coldfusion-10
为了注销用户,我总是使用以下行:
<cfset structClear(SESSION)>
<cfcookie name="CFID" value="" expires="NOW">
<cfcookie name="CFTOKEN" value="" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
它会在运行时清除会话中保留的数据,并重置/更新CFID和CFTOKEN.它仍然适用于我们的旧服务器(ColdFusion 8),但它不再适用于我们的新服务器(ColdFusion 10).ColdFusion 10中此尝试失败的原因相当简单:每当我尝试覆盖CFID或CFTOKEN(with <cfcookie>)时,cookie都会放在顶级域上,例如:
Cookie set via <cfcookie> on ColdFusion 10:
domain: .myserver.com
Run Code Online (Sandbox Code Playgroud)
而ColdFusion将其会话cookie放在实际(子)域上:
Generated CFID/CFTOKEN by ColdFusion 10:
domain: mywebsite.myserver.com
Run Code Online (Sandbox Code Playgroud)
有趣的是:如果我设置如下:
<cfcookie name="TEST" value="..." expires="NEVER">
Run Code Online (Sandbox Code Playgroud)
cookie正确设置为:
domain: mywebsite.myserver.com
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法轻松清除cookie:
<cfcookie name="TEST" value="" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
我试图使用域属性,但是这个:
<cfcookie name="CFID" value="" domain="mywebsite.myserver.com" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
总是最终:
domain: .mywebsite.myserver.com
Run Code Online (Sandbox Code Playgroud)
(注意前面的点)因此不被识别为相同的cookie.
另一个奇怪的是,使用:
<cfcookie name="CFID" value="" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
不会只生成一个包含错误域名的cookie,而是保留而不是删除过期.
我在ColdFusion 10机器上检查了cookie的服务器设置,Disable updating ColdFusion internal cookies using ColdFusion tags/functions但未检查属性.
这个奇怪的案子可以帮助我吗?
关于<cfcookie>域的相关行为已经有了一些深入的讨论.以下帖子提到解决方法似乎<cfheader>用于处理cookie:
为什么cfcookie不允许将domain =设置为CFID/CFTOKEN的子域?
在发布该问题之后,Henry实际上在其上输入了一个关于Adobe的错误:
https
://bugbase.adobe.com/index.cfm?event = bug
&id = 3593673
您可以添加您的评论/投票给错误.
虽然我相信这些引用会回答您关于<cfcookie>您所看到的行为的问题,但如果您只关心用户会话的"过期",那么Scott的回答会为您提供一种更好的方法来使用户当前会话无效,而不是手动设置Cookie.