你如何删除Rails中的通配符cookie?

时间:2008-09-09 21:12:46

标签: ruby-on-rails

如何删除使用通配符域设置的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的“正确”方法是什么?

1 个答案:

答案 0 :(得分: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'

你已经定下来了。