Open1

sinatra小ネタ

Tatsumi YamamotoTatsumi Yamamoto

セッションを使う

sinatraでセッションを使うにはenable :session(または set :sessions, true)をする。
これをすると、ユーザーセッションごとに1つのハッシュが作られる。

enable :sessions

get '/' do
  'value = ' << session[:value].inspect
end

get '/:value' do
  session['value'] = params['value']
end

セッションシークレットを設定する

sinatraはデフォルトだと、32バイトのランダムなセッションシークレットを生成してくれる。
でもこれはアプリケーションを再起動すると変わってしまうので、例えばアプリケーションを複数のサーバーで動かしたりすると、各サーバーが違うセッションシークレットを生成してしまって色々面倒らしい。

これを解消するために、セッションシークレットは明示的に設定したほうがいい。
以下のような手順で行う:

十分長いランダムな文字列を生成する(64バイト以上)

$ ruby -e "require 'securerandom'; puts SecureRandom.hex(64)"
99ae8af...snip...ec0f262ac

.envファイルに追加

.env
SESSION_SECRET=いま生成したやつ

設定する

require 'securerandom'
# -or- require 'sysrandom/securerandom'

# ENV.fetch('SESSION_SECRET')を基本的に使うが、とれなかったらSecreRandom.hex(64)を使う
set :session_secret, ENV.fetch('SESSION_SECRET') { SecureRandom.hex(64) }