web-dev-qa-db-ja.com

コントローラからのCookieの削除

JQueryを使用してフォームにいくつかのCookie値を設定しました。私はRailsコントローラーでcookiesメソッドを介してコントローラーで問題なく読み取ることができます。cookies.delete(:my_key)を呼び出すと、cookiesを再度呼び出すと、それらはなくなったように見えます。しかし、リロードするとページ、クッキーは再び戻ってきました。

コントローラ内からクッキーを完全に削除する方法はありますか?

編集

私が応答ヘッダーを見ていると、これは非常に奇妙で、Cookieが削除されているようです。多分それはそれが302リクエストであるためですか?

Set-Cookie: my_key=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
30
Dex

たとえば、あなたのクッキーは次のようになります

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

あなたがこれを試したとき=> cookies.delete :foo

ログは次のようになります=> Cookie set: foo=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT

ドメインが欠落していることに注意してください。このようにしてみました

cookies.delete:foo、:domain => '.text.com'

関数=>

# 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
37
Rubyist

Rails api によると、削除メソッドがあるため、ドメインの使用を設定していない場合

cookies.delete :my_key

ドメインを設定した場合

cookies.delete :my_key, domain: 'mydomain.com'
13
Obromios