Open1
sinatra小ネタ
セッションを使う
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) }