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

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

新規登録して質問してみよう
ただいま回答率
85.50%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Ruby on Rails

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

2回答

614閲覧

[Railsアプリケーション] クッキーに_サイト名_sessionの値が常に入っているはのなぜ?

nama-chan

総合スコア31

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Ruby on Rails

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

3クリップ

投稿2019/05/21 01:32

編集2019/05/22 00:22

前提

  • OWASPを使ってリクエスト/レスポンスを監視
  • ログイン/ログアウト機能がある自作したRailsアプリケーション
  • ブラウザのクッキーは削除
  • _サイト名_session_B= B でログイン状態を管理

質問

上記前提で作成したRailsアプリケーションのトップページにアクセスしてみました。
トップページにアクセスしただけなのですが

_サイト名_session_A= A

ブラウザのクッキーに上記のセッションIDと値が入っていることが確認できました。
これは一体どんな役割があるセッションなのでしょうか??
このrailsアプリケーションは自作したものなので中身は知っているのですが

  • 上記のような名前でセッションIDをクッキーに使った覚えはありませんでした
  • トップページを見ただけでクッキーを使う仕様でありません。(grepでも確認してみました)おそらくサーバー(Rails)が割り当てているものなのかな?と思っています
  • このrailsアプリケーションではログイン状態を管理するのに_サイト名_session_B= Bでクッキーを使っています。なので上記はログイン関係ではありません。

twitterなどでもトップページにアクセスするとこのようなセッションがわりあてられていました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

これはログイン状態を管理しているものではなくて、別の意味があるのでしょうか?

ウェブの基礎となるHTTPは「状態」を保持する機能がありません。なので、ページをまたがって情報を「覚えておく」ことができません。
しかし、アプリケーションを書くためには、ページをまたがって情報を覚えておきたいニーズがあります。ログインの状態もその一つですが、他にも、ECサイトのショッピングカートの情報も該当します。
そのようなさまざまなニーズに対応するために、クッキーというものが考案され、そのクッキーの応用としてセッションという機能が作られました。

なので、ログイン状態の管理のためだけにセッションがあるわけではありません。ログイン状態の管理はセッションを使う応用の一つに過ぎません。セッションは、他の目的でも使うことができます。


(追記)

このトップページにアクセスしただけでクッキーに保存される_サイト名_session_A= Aとは一体どんな役割があるのでしょうか?

Railsの場合、セッション管理の方式が複数用意されていますが、デフォルトではCookieStoreというものが使われます。これは、セッションの中身を暗号化してクッキー自体に保存する方式です。
この場合、クッキーはセッション情報を格納する「容器」としての働きです。セッションを有効化すると、セッションに何も保存していなくても、「空の容器」が作られるわけです。
「空の容器」があることで、セッション自体は有効であること、その中には何も入っていないことがわかります。


(追記)

容器には_サイト名_session_Aの値が入っているようにみえます。

トップページにアクセスするだけでクッキーに保存される
_サイト名_session_A
とは一体何なのでしょうか??

クッキーは、名前=値 を形式になっています。これが複数でもいいわけです。言い換えれば、複数のクッキーが保存できるからこそ、名前がついてないと区別できないわけですね。
で、セッションを識別するクッキーにも名前がついています。PHP等ですと、PHPSESSIDという名前がデフォルトですが、変更もできます。今動かしているアプリの場合は、_サイト名_session_A という名前をつけているということです。これは単に「識別のための名前」です。
値の方は、L202aFhZS09FK1JGKzEyVE9JMFhFUEV4..............ですが、これは暗号化されています。利用者本人といえども、セッションの内容を書き換えられると、他人になりすましができたりするからです。「空の容器」といっても、0バイトという意味ではなく、容器そのものがあったり、場合によってはタイムスタンプのようなものがあったりしますので、何かしらデータはあり、それを暗号化しているものを見ていることになります。

投稿2019/05/21 21:37

編集2019/05/22 06:40
ockeghem

総合スコア11701

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

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

nama-chan

2019/05/22 00:26

ご回答ありがとうございます! 調べたところログイン状態の管理では他のセッションID名を使っていました。失礼しました。 少し質問を修正させてもらいました。 このトップページにアクセスしただけでクッキーに保存される_サイト名_session_A= Aとは一体どんな役割があるのでしょうか?
nama-chan

2019/05/22 02:11

自分の理解が足りておらず申し訳ないです。追加で質問させてください。 >クッキーはセッション情報を格納する「容器」としての働きです この場合リクエストヘッダの Cookie: これが容器とういう理解なのですがこの理解で良いでしょうか? その場合に 初めてトップページにアクセスするとレスポンスにSet-Cookie:がありサーバがCookieの送信を要求していて 最初にトップページにアクセスした時のレスポンス Set-Cookie: _サイト名_session_A=L202aFhZS09FK1JGKzEyVE9JMFhFUEV4..............長い文字列 次に もう一度トップページにアクセスした時のリクエスト Cookie: xxxx;xxxx;xxxx;_サイト名_session_A=L202aFhZS09FK1JGKzEyVE9JMFhFUEV4.............. _サイト名_session_Aをクッキー(容器)に入れて送信している 以後同じようにトップページにアクセスすると_サイト名_session_Aの値は毎回異なる > 「空の容器」があることで、セッション自体は有効であること、その中には何も入っていないことがわかります。 容器には_サイト名_session_Aの値が入っているようにみえます。 トップページにアクセスするだけでクッキーに保存される _サイト名_session_A とは一体何なのでしょうか??
nama-chan

2019/05/22 07:31

> 場合によってはタイムスタンプのようなものがあったりしますので、何かしらデータはあり _サイト名_session_A=値 サーバー側(Rails)で使用している何かしらの値ということですね! 最初は自分でログインの際にクッキーに値(ID=値)をいれていたのでこれかなと思いログインしていないのにクッキーにログイン時の値(ID=値)が入っているのだろうとおもったのですが、確認すると実際はログイン時は違う値(上とは異なるID=値)を使っていました。。 だったらトップページにアクセスするたびにクッキーにある_サイト名_session_A=値は何に使っているのだろうと思ったのですが、何かしらRails側で使用しているということですね。。
guest

0

一度cookieを削除してアクセスした時、user_idもsession_idも失われたのですが、サーバー側で新しくsession_idをつけられたということではないでしょうか。

cookieは主にsessionを管理するために使われます。
sessionとは、ある訪問者が(これはログインユーザーかゲストユーザーか関係なく)、サイトにアクセスした時に目印(session_id)をつけておいて、どんな行動をしたのか追跡するために使います。
例えば、logにsession_idと通信の記録(何をリクエストして何をレスポンスしたか)を残し、あとでsession_idで検索をかけて時系列に並べれば、その訪問者の軌跡を辿ることができます。

それに付け加える形で、認証の結果をsession情報に残す事もできるという事です。(例えば、user_idといった内容)

投稿2019/05/21 15:41

編集2019/05/21 15:42
urbainleverrier

総合スコア200

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

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

nama-chan

2019/05/22 07:32

回答ありがとうございます! >どんな行動をしたのか追跡するために使います。 たしかにセッションを追跡すればどんな行動したか把握できますね!クッキーがログに出力されているか確認してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問