Help us understand the problem. What is going on with this article?

IT業界で長年やってるのに、なんなのか答えられない単語について語る2

こんにちわ。パグです。
今日もモヤモヤ理解してるけど説明できない内容について語ります。
1はこちら→プロトコルについて

今日は「セッション」についてです。

はい、じゃあ説明していきます。
セッションってなんなの?って聞かれた時になんて答えますか?

セッションとはとかで調べたり、先輩に聞いたりして、
・通信に先立って、2台のホスト間で必要なデータをやり取りすること
・WEBページを開いて離脱するまでの1連の流れのこと
(参考リンク)
https://www.seohacks.net/basic/terms/session/
https://wa3.i-3-i.info/word1791.html

こういった説明をよくされるのではないでしょうか。
この二つは、実は同じ話をしているのですが、内容を理解していないと
全然異なるものに感じます。そのためセッションという言葉の意味が曖昧になります。

WEBのリクエストについて

セッションを理解する前に、WEBブラウザが表示されるまでの仕組みについて
説明します。WEBサイト、というのは、ユーザー(のPCやスマホ)からどこかのWEBサーバー
にリクエストを投げます。WEBサーバーからはこのリクエスに応じたページを返信して終了します。

例えば、私が、どこかのサイトで買い物をしたいとします。
ブラウザにURLを入れるか検索サイトでアクセスすると、このサイトのトップページが表示されます。
そこで買い物をする場合にどういったやり取りがなされるかというと
ーーーーーー
START
ーーーーーー
私:トップページが見たい
サーバー:ほらよ(トップページ返す)
ーーーーーー
私:これ買いたい
サーバー:ほらよ(カート画面返す)
ーーーーーー
私:クレカはこれね
サーバー:ほらよ(決済画面返す)
ーーーーーー
私:購入できたから、画面閉じる
ーーーーーー
END
ーーーーーー
HTTPは通常このような流れで、サーバーからは「ほらよ」と画面が返された時点で一回毎のやり取りは終了します。
ここに今どういった状態であるかを保存する機構を持たないためです。
でも上記のような買い物をしたい、のような動作の場合、トップページからカート画面へ遷移する時に、
どの商品を持って遷移したか、とか、決済画面に行く時に、どのユーザーであるのか、などを
サーバー側がわかっていないと、適切な画面を返すことができません。ですが、HTTPの通信には、
このような情報を保持する箇所がありません(※1)。
じゃあ現在の技術ではどのようにして現状の状態を保持しているのかというと、ここでやっと「セッション」
がでてきます。

セッションとは

「セッション」とは一連のやり取りの中で、今の状態を維持したまま相互に通信されている状態のこと、と理解しましょう。
例えば、STARTからENDまでの流れを「1つのセッション」として説明すると、
STARTからENDまで私がログインしていて、この商品を買って、このカードで買うという
現状状態を保持した状態で、サーバーと私が通信している、この現状状態を保持した状態での通信が1つのセッションです。

たまに、セッションをクッキーのようなものやキャッシュのようなものと誤解されている方がいますが、
それはクッキーであり、キャッシュであって、セッションは保存するところの名称ではありません(※2)。
通信に必要な情報を保持したまま通信を行なっている状態の方をセッションと呼びます。
このセッション中に、どこに情報を保存するかというと、通常はクッキー+何か(RDSやKVSやmemchacedなど)または
クッキーに直接本体を突っ込む。または、ファイルで持っている。など色々と種類があります。
いずれも、暗号化された状態で、たとえその実体を盗まれたとしても、中身が見えないようにした状態で保存している必要があります。

結論

最初に出てきた
・通信に先立って、2台のホスト間で必要なデータをやり取りすること
・WEBページを開いて離脱するまでの1連の流れのこと
とはつまり同じことを指していて、どちらの言葉も使って説明すると・・・
「セッションとは、WEBページを開いて離脱するまでの1連の流れの中で、通信に先立って、2台のホスト間で必要なデータをやり取りすること」
となります。
クッキーやキャッシュと混同して混乱している新人がいたら、
「それはセッションの保存領域のことでセッションのことじゃないからぁ(ドヤァ)」
と説明してあげてください。
———
(※1)ログイン情報とかでない場合は、POST、GETでいけるんちゃうかって考える人もいると思うんですが、
今回はあくまで「セッション」の説明だということに注目してください。

(※2)今回はsessionStorageの説明ではありません
———

以上になります。いずれ。また。

この記事は自社サイトで公開したものを転記しています。
https://core-tech.jp/blog/article447/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした