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

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

ただいまの
回答率

88.78%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 853

nama-chan

score 27

前提

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

質問

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

_サイト名_session_A= A

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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

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


(追記)

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

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


(追記)

容器には_サイト名_session_Aの値が入っているようにみえます。
トップページにアクセスするだけでクッキーに保存される
_サイト名_session_A
とは一体何なのでしょうか??

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/22 09:26

    ご回答ありがとうございます!

    調べたところログイン状態の管理では他のセッションID名を使っていました。失礼しました。
    少し質問を修正させてもらいました。

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

    キャンセル

  • 2019/05/22 11: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
    とは一体何なのでしょうか??

    キャンセル

  • 2019/05/22 16:31

    > 場合によってはタイムスタンプのようなものがあったりしますので、何かしらデータはあり

    _サイト名_session_A=値

    サーバー側(Rails)で使用している何かしらの値ということですね!

    最初は自分でログインの際にクッキーに値(ID=値)をいれていたのでこれかなと思いログインしていないのにクッキーにログイン時の値(ID=値)が入っているのだろうとおもったのですが、確認すると実際はログイン時は違う値(上とは異なるID=値)を使っていました。。

    だったらトップページにアクセスするたびにクッキーにある_サイト名_session_A=値は何に使っているのだろうと思ったのですが、何かしらRails側で使用しているということですね。。

    キャンセル

0

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/22 16:32

    回答ありがとうございます!

    >どんな行動をしたのか追跡するために使います。

    たしかにセッションを追跡すればどんな行動したか把握できますね!クッキーがログに出力されているか確認してみます!

    キャンセル

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

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る