13

ワイルドカードドメインで設定されたレールでクッキーを削除するにはどうすればよいですか:

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 はまだそこにあります。Browser -> ctrl/ cmd- L->

javascript:alert(document.cookie);

ほら!

Q: そのような 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 に答える