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

SinatraでCookieを発行するときの設定

このブログを全然更新してなかったら生死の心配をされたので、久しぶりに何か書きます。

RubyでWebアプリといえばRailsが主流ですし、Web APIだったらGrapeだったりするのかもしれませんが、今回はあまり話題にもならなくなったSinatraの話です。
そんなSinatraCookieを発行する際に、domainやpathをどうやってセットするのかわからず、ぐぐってもパッと出てこなかったので書いておきます。

まずSinatraCookieを発行する場合は以下のように書けば良いです

  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が原因だったりするので、SinatraActiveRecord使っちゃうとあんまり意味ないことになるんですけどね…。