🎭

クッキーとセッションはなんですか?

2024/01/30に公開

なぜクッキーとセッションをつかいますか?

HTTPプロトコルの特徴を補うために使用されます。

Connectionless (非連結指向)

クライアントがサーバーにリクエスト(Request)をした時、
その要求に応じた応答(Response)を送信した後、接続を切断する処理方式です。
HTTP 1.1バージョンで接続を維持し、リサイクルする機能がDefaultとして追加されました。
(keep-alive値に変更可能)

Statelessプロトコル(ステータス情報を維持しません)

クライアントのステータス情報を持たないサーバー処理方式です。
クライアントと最初の通信でデータをやり取りしたとしても、
2 番目の通信で以前のデータを保持しません。

But、実際にはデータの保持が必要な場合が多いです。
情報が維持されない場合は、毎回ページを移動するたびにログインし直したり、
商品を選択したところ、購入ページで選択した商品の情報がないなどのことが発生することがあります。
→ そのため、Stateful 場合に対処するためにクッキーとセッションを使います。

クッキーとセッションの違い

簡単に見るとステータス情報の保存場所が違いますです。

  • クッキーは「クライアント(=ローカルPC)」に保存します。
  • セッションは「サーバー」に保存します。

サーバとクライアントが通信をするとき、通信が連続的につながらず、一度通信されると切断されます。
したがって、サーバーはクライアントが誰であるかを認証し続ける必要があります。 しかし、それは面倒なことです。
また、ウェブページのロードを遅くする要因にもなります。 そんな煩わしさを解決する方法がクッキーとセッションです。
まとめると、クライアントと情報を保持するために使用するのがクッキーとセッションです。

クッキー(Cookie)

HTTPの一種で、ユーザが何らかのウェブサイトを訪問する場合、そのサイトが使用しているサーバからユーザのコンピュータに保存する小さな記録情報ファイルです。

HTTPでクライアントの状態情報をクライアントのPCに保存し、必要に応じて情報を参照したり、再利用することができます。

クッキーの特徴

  • 名前、値、有効期限(保存期間の設定)、パス情報で構成されています。
  • アスキー文字のみ可能です。
  • クライアントに合計300個のクッキーを保存できます。
  • 1つのドメインにつき20個のクッキーを持つことができます。
  • 1つのクッキーは4KB(=4096byte)まで保存可能です。

クッキーの動作手順

  1. クライアントがページをリクエストします。 (ユーザーがウェブサイトにアクセスします)
  2. ウェブ サーバーはクッキーを生成します。
  3. 生成したクッキーに情報を入れてHTTP画面を返す時、一緒にクライアントに返す。
  4. 受け取ったクッキーはクライアントが持ってる(ローカルPCに保存)
  5. もう一度サーバにリクエストするときに、クッキーを送信します。
  6. 同一サイトの再訪問時、クライアントのPCに該当クッキーがある場合、要請ページと共にクッキーを送信します。

使用例

  • 訪問したサイトに再度訪問する際、IDとパスワードを自動入力します。
  • ポップアップウィンドウで、"今日このウィンドウをもう二度と見ない"というチェックを入れます。

セッション(Session)

一定時間同じユーザー(ブラウザ)から入ってくる一連の要求を一つの状態と見て、その状態を一定に保つ技術です。

ここで一定時間とは、パージ訪問者がウェブブラウザを通じてウェブサーバーに接続した時からウェブブラウザを終了して接続を終了した時です。

つまり、訪問者がウェブサーバに接続している状態を一つの単位と見て、それをセッションといいます。

セッションの特徴

  • ウェブ サーバーにウェブ コンテナの状態を維持するための情報を保存します。
  • Webサーバの保存されるクッキー(=セッションクッキー)ブラウザを閉じるか、サーバからセッションを削除したときにのみ削除されるので、クッキーよりも比較的セキュリティが良いです。
  • 保存データに制限はありません。
  • 各クライアント固有のSession IDを付与します。
  • Session IDでクライアントを区別し、各クライアントのニーズに合わせたサービスを提供します。

セッションの動作手順

  1. クライアントがページをリクエストします。 (ユーザーがウェブサイトにアクセス)
  2. サーバは、アクセスしたクライアントのRequest-HeaderフィールドであるCookieを確認し、クライアントがそのsession-idを送信したかどうかを確認します。
  3. session-idが存在しない場合、サーバはsession-idを生成してクライアントに返す。
  4. サーバーからクライアントに返したセッション-idをクッキーを使ってサーバーに保存します。
    クッキー名:JSESSIONID
  5. クライアントは再接続時、このクッキー(JSESSIONID)を利用してセッション-id値をサーバに渡します。

使用例

画面が移動してもログインが解除されず、ログアウトするまで維持します。

Discussion