2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

sessionとcookieの違いについて整理しよう

Posted at

この記事の作成理由

この記事を書こうと思ったきっかけは、「セッションとクッキーの違いってなに?」という質問をされて上手く答えられなかったので、自分で調べたものをメモとして残そうと思いました。

そもそもクッキーはなぜ必要なの??

まず、そもそもなぜクッキーが必要なのかについて書いていきます。
結論を言うと、ブラウザとサーバー間の通信は状態を持たない通信 「HTTPステートレス」 だからです。

HTTPステートレス通信

簡単に、HTTPステートレスについて説明します。

太郎君 「ネットで買い物をしよう!鍋を作りたいからまず必要なネギをカートに入れよう」
サーバー「太郎君、初めまして!カートにネギを入れたよ!」
太郎君 「よし、カートにネギが入ってるね」

スクリーンショット 2022-08-13 8.18.29.png

太郎君 「次は、お肉もカートに入れてっと」
サーバー「太郎君、初めまして!カートにお肉を入れたよ!」
太郎君 「あれ??さっき入れたネギが入ってなくて、お肉だけになってる!!」

スクリーンショット 2022-08-13 8.24.29.png

このように、同じブラウザ(太郎君)でリクエストを行ってもサーバーでは同一人物と認識できず、毎回初めまして!の状態になることを、「HTTPステートレス」といいます。

ただ、ショッピングカートがこのような状態だと不便なので対策が必要ですね。
なので、情報を保持してあげる必要があります。その時に、よく出てくる単語が 「セッション」「クッキー」 という言葉です。

セッションについて

まずは、「セッション」について説明します。

下記はセッションについての説明です。

コンピューターネットワークにおけるセッションとは、通信の開始から終了までを指します。クライアントとサーバーで通信を行う場合であれば、クライアントからサーバーへ接続した時点でセッションが始まり、サーバーから切断するとセッションが終了します

つまり、最初のショッピングカートの例で言うと太郎君とサーバーでの1回のやり取りを1つのセッションということができます。

ここで、あれ?セッションってブラウザ(セッションID)とサーバー側に保存されるやつじゃないの??と思った方は後ほど説明しますので、少々お待ちください。

クッキーについて

次に、クッキーについて説明します。

Wekipedia上では下記の説明がされています。

HTTPにおけるウェブサーバとウェブブラウザ間で状態を管理する通信プロトコル、またそこで用いられるウェブブラウザに保存された情報のことを指す。ユーザ識別やセッション管理を実現する目的などに利用される

つまり、ショッピングカートでネギを入れた人(1回目の太郎君)と肉を入れた人(2回目の太郎君)を同じ人だと識別するためにはクッキーが必要になるということですね。

クッキーの仕組み

クッキーのざっくりとした仕組みを説明します。

①まず太郎君がログインIDとパスワードをサーバーに投げます。するとサーバー側で、ログインが成功した場合は太郎君であることを証明するためのクッキーを渡します。

スクリーンショット 2022-08-15 22.06.38.png

②太郎君がもう一度先ほどのサイトを訪れました。
 今回は2回目の訪問なので、先程①で発行されたクッキーをサイトに渡します。
 するとサーバー側は、このサイト訪問者が①の時と同じ人物(太郎君)だと認識ができます。
スクリーンショット 2022-08-15 22.09.52.png

このように、クッキーを使うことでHTTPステートレスという状態を持たない通信においても同一人物が否かを判断できるなどの情報の保持を行うことができます。

クッキーの種類について

session cookie             persistent cookie              
よく使われる名称  セッション             クッキー              
利用期間      一時的なクッキー(session ≒ 特的の期間)   ずっと使えるクッキー(persistent ≒ 持続する)
具体例       ブラウザを閉じると消えるクッキー        ブラウザを閉じても消えないクッキー        
保存場所      ブラウザとwebサーバ           ブラウザのみ                   
有効期間      設定しない                   設定できる                   

cookieの種類の中にセッションという名称でよく使われているsession cookieが存在している

では、cookieの種類がどのような働きをしているのか説明します。

session cookie(通称:セッション)

まず、ユーザーがログイン情報等を入れて、サーバーに情報を送ると、サーバーからランダムなID(セッションID)が発行されます。ユーザー側にはセッションIDが渡され、データストアには実際の値(ユーザーIDなど)が保存されます。サーバー側はセッションIDを受け取ることで、ユーザーの特定を行うことができます。また、セッションIDを使用することで、機密情報をサーバーに送ることなくユーザー特定が可能になります。

スクリーンショット 2022-08-16 22.19.13.png

「クッキーの表について」の表に記載しましたが、このクッキーはブラウザを閉じると消えるクッキーとなります。ですので、ブラウザを閉じて、もう一度このサイトに訪れるとクッキー状態は以下のように消えてしまい、セッションIDによるユーザー特定ができなくなります。
スクリーンショット 2022-08-19 7.13.59.png

persistent cookie(通称:クッキー)

こちらはデータを直接cookieに保存する方法です。

スクリーンショット 2022-08-19 7.26.50.png

ユーザーがログインとパスワードをサーバーに送り、cookieが発行されます。
先程との違いは、ユーザーIDや会員情報などのデータを直接cookieに入れているところです。
ただ、このままだと任意にユーザーが書き換え可能なので署名付きの暗号化を行います。
また、このcookieはpersistent(持続する)cookieなので、ブラウザを閉じても消えずに、再びサイトを訪れた際にも情報が保持されています。

まとめ

sessionとcookieについて混乱する原因の一つとして、通信の開始から終了までをセッションと呼んでいますが、session cookieの通称もセッションと呼んでいるため、この「セッション」という言葉がどちらを指しているのか分からなくなり、混乱を生み出しているのではないかと思いました。

session cookieのデータストアでの種類などもあったのでこれはまた別の機会に勉強してみます。

参考にしたサイト

セッションとクッキーの謎:違いを説明できるようになる動画

HTTP解説 その6 セッションとクッキーの仕組み (ざっくり解説)

HTTP解説 その7 クッキーの詳細説明

HTTP解説 その8 セッションの詳細説明

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?