删除 Rails 中的 cookie

shr*_*eyj 7 cookies ruby-on-rails-3

我有一个 cookie,它可以存在于这些域中的任何一个 - www.xyz.com 或 .xyz.com。我无法通过代码删除 cookie。由于它可以存在于任何一个域中,我假设执行以下操作就足够了:

...
cookies.delete cookie  #delete cookie if it exists on current domain(www.xyz.com)
cookies.delete cookie, :domain => :all #delete cookie if it exists on root (.xyz.com)
...
Run Code Online (Sandbox Code Playgroud)

cookies.delete cookie, :domain => :all似乎使第一个调用无用,就好像 cookie 是在 www.xyz.com 上设置的,然后它就不会被删除。

关于如何删除可能存在于两个不同域中的 cookie 的任何想法?

Nic*_*Roz 6

好吧,Rails 不允许在一次请求中两次删除同名 cookie,尽管它们已针对不同的域进行了设置。

假设您正在尝试注销,双重重定向是我想到的最好的方法:

def logout
  cookie.delete(:user_id)
  redirect_to logout_all_path
end

def logout_all
  cookie.delete(:user_id, domain: :all)
end
Run Code Online (Sandbox Code Playgroud)

不知道Rails 6 是否解决了这个问题,所以PR 不会受到伤害。

删除 cookie 时cookie.delete(:user_id)与显式表单相同cookie.delete(:user_id, domain: nil)

在代码中指定域不是强制性的。


kat*_*tan 3

我认为您需要明确要删除哪个域的 cookie

cookies.delete cookie, :domain => "xyz.com"

Rails 文档来看,看起来你可以设置domain: :all不能删除