SinatraでCookieを発行するときの設定
このブログを全然更新してなかったら生死の心配をされたので、久しぶりに何か書きます。
RubyでWebアプリといえばRailsが主流ですし、Web APIだったらGrapeだったりするのかもしれませんが、今回はあまり話題にもならなくなったSinatraの話です。
そんなSinatraでCookieを発行する際に、domainやpathをどうやってセットするのかわからず、ぐぐってもパッと出てこなかったので書いておきます。
まずSinatraでCookieを発行する場合は以下のように書けば良いです
delete '/perl' do cookies[:perl] = 'dead' end
しかし、この時に発行されるCookieのdomainやpathはリクエストがあったサーバのホストとリクエストのパスになるようです。
クライアントからのリクエストを一旦プロキシサーバが受けて、その後別のホストにプロキシしてるような特殊な環境下でこのまま処理を行うと大変なことになります。
というわけでdomainとpathを設定しましょう。
class Hoge < Sinatra::Base set :cookie_options, { domain: 'example.com', path: '/' } delete '/perl' do cookies[:perl] = 'dead' end end
cookie_optionsにいろいろ設定すれば良いだけです。簡単でした。
ちなみにdomainとpath以外にも、secureとhttponlyもちゃんと設定できます。
Sinatraはログ周りとかちゃんと設定しないと本番で運用するのは大変ですが、やってることはシンプルなのでパフォーマンスとか求める場合は良いのかなーと思ったりします。ただRailsが遅いのはActiveRecordが原因だったりするので、SinatraでActiveRecord使っちゃうとあんまり意味ないことになるんですけどね…。