如雨露の日記

学んだことを書いていくサイトです。もし誤りがあれば指摘していただけると嬉しいです。

Railsでセッションの保存を指示している場所を探してみた

お久しぶりです。ふと思ったけどこのブログタイトル詐欺もいいところですね。

自分は大学を卒業して社会人になりました。

では早速本題へ。

最近、自分はRuby on Rails チュートリアル:実例を使って Rails を学ぼうでRailsの勉強をしています。

このサイトでログインしているユーザーのIDをcookieに保存させるという演習があります。

そこ自体は問題もなく処理できていてログアウト処理も完成したのですが、ふとブラウザを確認するとログアウト後もcookieが保存されていました。

試しにcookieを削除してメインページを再読み込みしてみると↓

f:id:ninataka_japan:20170803204511p:plain

f:id:ninataka_japan:20170803204531p:plain

なんかある・・・もう一度削除して再読み込みしてもまた存在している・・・

ということで今回のcookieはどこから指示されてset-cookieに書き込まれたのかを調べました。

結論から言うとここのファイルの中のmake_set_cookie_headerメソッドで書き込みの指示をしていました。 write_cookie?メソッドがtrueだったらcookieに書き込むように指示しています。 ではwrite_cookie?メソッドの中身をみてみると。

request.ssl? || !cookie[:secure] || always_write_cookie

この3つの設定のうちどれか1つでもtrueだったらcookie保存するようです。

always_write_cookieが怪しすぎる(なんでこんなものがあるのか)

この変数が設定されている場所を探してみます(ここでした) どれどれ

config.action_dispatch.always_write_cookie = Rails.env.development? if config.action_dispatch.always_write_cookie.nil?

dev環境だとtrueになりますね。まじかよ。

request.ssl? || cookie[:secure]

も調べてみました(WEBで)

request.ssl?はhttps通信になっているかを返すらしいです。(参考サイト

!cookie[:secure]はsecureに設定されているcookieは送信しないよってことみたいです。(参考サイト

なんで!つけてるのかと思いましたがrequest.ssl?も合わせて考えるとそりゃそうかって感じですね。

本番環境でhttps通信じゃないのにsecure属性のcookie送ることになってしまう・・・

自分の場合はcookie[:secure]とalways_write_cookieがtrueだったのでページを再読み込みしたり移動するたびにset-cookieがヘッダに含まれていたんですね。

なるほど