代码之家  ›  专栏  ›  技术社区  ›  Purfideas

如何删除Rails中的通配符cookies?

  •  13
  • Purfideas  · 技术社区  · 16 年前

    如何在使用通配符域设置的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 -gt;

    javascript:alert(document.cookie);
    

    加油!

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

    1 回复  |  直到 9 年前
        1
  •  20
  •   Jordi Bunster    9 年前

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

    # 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'
    

    你已经准备好了。