1

当我访问某个页面时,我试图删除客户端 cookie。我该怎么做?即使使用下面的代码,我也无法删除客户端 cookie:

<cfcookie name="GIFT CAT" value="" expires="NOW" />
<cfset StructDelete(cookie, 'GIFTCAT', false)>
4

2 回答 2

2

您需要确保所有属性都与设置的 cookie 相同。如此安全,特别是域和路径。

<cfcookie name="test1" value="1" domain="test.com" />
<cfcookie name="test1" value="" expires="now" />

不起作用,但是

<cfcookie name="test1" value="1" domain="test.com" />
<cfcookie name="test1" value="" domain="test.com" expires="now" />

确实有效。

于 2013-10-25T17:57:56.227 回答
2

(从评论扩展)

听起来您正在错误地测试 cookie 状态。您不能在单个 http 请求中执行此操作。必须将 http 响应发送回浏览器才能真正删除客户端 cookie。该更改将反映在下一个http 请求中。

当我保留转储以查看显示空字符串的结果时

此外,如果您查看 ColdFusion 文档,它指出expire="now" 不会从活动页面的 Cookie 范围中删除相应的变量)。因此,如果您删除一个 cookie,然后cookie在同一页面上转储范围,则删除的 cookie 仍然存在。在您的情况下,这value将是一个空字符串。

正确测试行为需要三个请求:

  1. 创建 cookie <cfcookie name="GIFT_CAT" value="Created cookie at #now()#"/>:. 在浏览器中运行脚本后,“GIFT_CAT”:

    • 存在于 CFcookie范围内
    • 存在于浏览器 cookie 中

  2. 删除 cookie <cfcookie name="GIFT_CAT" value="" expires="NOW" />:。在浏览器中运行脚本后,“GIFT_CAT”:

    • 仍然存在于 CFcookie范围内(因为expire没有在活动页面上删除它)
    • 浏览器cookie中不存在(因为浏览器收到响应后会删除cookie)

  3. 最后,验证 cookie <cfdump var="#COOKIE#">:. 在浏览器中运行脚本后,“GIFT_CAT”:

    • 不存在于 CFcookie范围内
    • 浏览器 cookie 中不存在
于 2013-10-26T19:25:02.137 回答