質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

8853閲覧

railsログアウト時のCookiesの状態

yokoyan

総合スコア8

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/01/08 04:40

###前提・実現したいこと

https://railstutorial.jp/chapters/basic_login?version=5.0#sec-exercises_logging_out

Rails Tutorialの8.3 ログアウトの演習2について質問させてください。

「cookiesの内容を調べてみて、ログアウト後にはsessionが正常に削除されていることを確認してみましょう。」とあるとおり、Chromeのデベロッパーツールを開いてログイン中、ログアウト後のCookiesの状態を調べてみました。

ログイン中にCookiesの中にセッションらしきものはあるのですが、ログイン後もセッションが消えずに残っているように見えます。(下記添付画像参照)
ログアウトは正常に行われているようなのですが、セッションが消えていないのが気になります。
こちら原因わかりましたらご教授いただけますでしょうか?

###発生している問題・エラーメッセージ

特にエラーメッセージなどは表示されず、下記のようにセッションがそのまま残る以外におかしい点はありません。

ログイン中
イメージ説明

ログアウト後
イメージ説明

###試したこと

ログアウトボタン押下時には以下のdestroyアクションが実行されるようになっています。

sessions_controller.rb

def destroy log_out redirect_to root_url end

log_outメソッドはsession_helper.rb内で定義されています。
sessions_helper.rb

def log_out session.delete(:user_id) @current_user = nil end

※スペルミス等なければ基本Rails Tutorialにある通りです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

railsのセッションが残る事自体は正常な動作です。
この例では_sample_app_sessionというキーに対して暗号化されて保存されています。
そのため、ツールを使っても実際の内容は暗号化されているから見ることができません。

つまり、こういう風に書いてもクッキーにaとかbというキーが増えるわけではありません。

ruby

1session[:a] = 1 2session[:b] = 2

クッキー上では、_sample_app_session というキーにまとめて暗号化されて保存されます。
なので、ログアウト処理でこのようにuser_idのキーを削除していて、
正常にログアウトが出来ているのであれば、何の問題もないという事です。

ruby

1session.delete(:user_id)

投稿2017/01/09 02:59

編集2017/01/09 03:00
mingos

総合スコア4151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yokoyan

2017/01/09 05:28

回答ありがとうございます。 演習の説明に「cookiesの内容を調べてみて、ログアウト後にはsessionが正常に削除されていることを確認してみましょう。」とあるので簡単に確認できるものだと思ったのですが、そういうわけでもないのですね。
guest

0

rails は全く知らない自分がレスするのも何ですが (と言ってもクッキーの仕組みは知っています)、レスがつかないようなので・・・

サーバー側で保持しているセッション情報は削除されるがクッキーは維持されるということではないですか? ちなみに ASP.NET そうなってます。

質問者さんの画像のクッキーは、expire が設定されてないのでブラウザを閉じるまで有効です。それをサーバー側から削除するには expire が過去に設定してあるクッキーをブラウザに送信して、ブラウザに削除してもらう必要があります。そういう操作がされているか否か、キャプチャツールで調べてはいかかでしょう。

投稿2017/01/08 06:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yokoyan

2017/01/09 00:18

ご回答ありがとうございます。 キャプチャツールとは具体的にどのようなものを使えばよいでしょうか? 質問時に添付したデベロッパーツールでのcookieの確認以外の方法があるということでしょうか?
退会済みユーザー

退会済みユーザー

2017/01/09 01:03

個人的には Fiddler がお勧めです。Chrome のディベロッパーツールでもキャプチャはできますが、複数回の要求/応答のやり取りを連続して見ることができたかどうかは、自分は使いこなせてないので分かりません。 Fiddler については以下の記事が参考になると思います。 Fiddler のお勧め http://surferonwww.info/BlogEngine/post/2011/05/25/Recommendation-of-Fiddler.aspx
退会済みユーザー

退会済みユーザー

2017/01/09 04:04

mingos さんの回等を見て、ちょっとググって調べてみました。 Rails のセッション情報のストアはデフォルトでクッキー本体になるようですね。(セキュリティ的に問題あるそのような方法がデフォルトとは思っていませんでした・・・言い訳です) Railsのセッション管理方法について http://shindolog.hatenablog.com/entry/2014/11/02/164118 質問者さんがアップされた画像を見ると、セッション情報のストアはデフォルトでクッキー本体のようですね。 ログイン中/ログアウト後でクッキーの値が書き換わっているので、ログアウト操作でサーバー側でクッキーの値を書き換えて、それを応答ヘッダの Set-Cookie フィールドに設定してブラウザに送信し、ブラウザ側でその値に書き換えたのではないかと思われます。 Fiddler で要求/応答をキャプチャするとその操作が調べられると思います。
yokoyan

2017/01/09 05:29

ありがとうございます。Fiddler調べておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問