13

如何删除使用通配符域设置的 Rails 中的 cookie:

cookies[:foo] = {:value => 'bar', :domain => '.acme.com'}

当遵循docs时,您可以:

cookies.delete :foo

日志说

Cookie set: foo=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT

请注意,缺少域(似乎对所有内容都使用默认参数)。尊重 RFC,当然 cookie 还在那里,浏览器 -> ctrl/ cmd- L->

javascript:alert(document.cookie);

瞧!

问:删除此类 cookie 的“正确”方法是什么?

4

1 回答 1

20

在删除时也传递 :domain 。这是该方法的来源:

# Removes the cookie on the client machine by setting the value to an empty string
# and setting its expiration date into the past.  Like []=, you can pass in an options
# hash to delete cookies with extra data such as a +path+.
def delete(name, options = {})
  options.stringify_keys!
  set_cookie(options.merge("name" => name.to_s, "value" => "", "expires" => Time.at(0)))
end

如您所见,它只是使用您提供的名称设置了一个空 cookie,设置为在 1969 年到期,并且没有任何内容。但它确实合并了您提供的任何其他选项,因此您可以执行以下操作:

cookies.delete :foo, :domain => '.acme.com'

你已经准备好了。

于 2008-09-09T22:23:35.297 回答