読者です 読者をやめる 読者になる 読者になる

Ruby on Railsでクッキーにドメインやパスを指定すると、cookies.deleteで削除できなくなる。

Ruby Rails

rails 1.1.6 / actionpack-1.12.5 で。

screenshot

なんだかクッキーが消えないと思ったら、domainを指定していたせいでした。以下のアプリケーションで確認しました。


cook_controller.rb

class CookController < ApplicationController
  def index
    @c = cookies
  end

  # クッキー保存
  def save
    cookies[:aaa] = { :value => "123" }
    cookies[:bbb] = { :value => "456", :path => "/cook" }
    cookies[:ccc] = { :value => "789", :domain => ".default.local" }
    redirect_to "/cook"
  end

  # クッキー削除
  def delete
    cookies.delete :aaa

    # pathやdomainが指定されているのでcookies.deleteでは消えない。
    cookies.delete :bbb
    cookies.delete :ccc

    # こっちなら消える。
    # cookies[:bbb] = {:value =>"", :path => "/cook", :expires => Time.at(0) }
    # cookies[:ccc] = {:value =>"", :domain => ".default.local", :expires => Time.at(0) }

    redirect_to "/cook"
  end

end


cook/index.rhtml

aaa: <%= @c[:aaa] %><br/>
bbb: <%= @c[:bbb] %><br/>
ccc: <%= @c[:ccc] %><br/>

<%= link_to "delete", :action => "delete" %><br/>
<%= link_to "save", :action => "save" %><br/>
<%= link_to "index", :action => "index" %><br/>