ChromeでSinatraのCookieを正しく動作させる
SinatraでCookieを(とりあえず)使う
まずはsinatra-contribというgemが必要。
Gemfileに
gem 'sinatra-contrib'
と書いてbundle installするか、
gem install sinatra-contrib
でインストール。
そうすると
require 'sinatra/cookies'
でCookieが利用できるようになる。
Cookie自体の使い方は至って簡単で、
get '/test' do cookies[:test] = 'hogehoge' "cookies[:test] = #{cookies[:test]}" end
のようにcookiesというハッシュオブジェクトを通して利用することができる。
はずだったのだが…
Session Cookieではなく永続Cookieを使う
「え?Cookieって永続するんじゃないの?」
と思うところなのだが、実はSinatraはデフォルトの状態ではSessionベースのCookieを使っているらしい。
Sessionベースというか、ようするにSessionだ。
つまり、ブラウザを閉じればCookieが飛んでしまう。
あまり詳しい理由はわからないが、Session CookieだとChromeではCookieが保存されなかった。理由を知ってるえらいひとがいたら是非教えてください!
ともかく、一般的な永続Cookieを利用することで、ChromeでもCookieが保存されるようになった。めでたしめでたし。
get '/test' do request.set_cookie :test, {:value => 'hogehoge', :max_age => "#{3600*24*7}"} "cookies[:test] = #{cookies[:test]}" end