🍪

CookieとSession

2023/07/09に公開

はじめに

今日は、チーム開発中にも少し触れたCookieとSessionについて
軽くですが、改めて学びました!

HTTPは状態を保持できない

HTTP(Hypertext Transfer Protocol)はステートレスなプロトコルです!

このステートレスな特性は、HTTPがシンプルで速度が速いという利点を持つ一方で、
ユーザーの情報を継続的に追跡する機能を自然とは持っていません。

これは、ウェブサイトでユーザーのログイン状態を保持したり、
カートに商品を追加するといった一連のアクションを行う上で問題となります。。

ここでCookieSessionが登場します!!

これらの技術は、HTTPがステートレスなプロトコルであるにも関わらず、
ウェブサイトがユーザーの情報やアクティビティを追跡し続けることを可能にします🙆🏻‍♀️

これにより、ユーザーのログイン状態を維持したり、
ショッピングカートの情報を保存したりすることが可能になっています👀

Cookieとは

Cookieは小さなテキストファイルで、ウェブサイトからユーザーのコンピューターに送られ、
ブラウザによって保存されます。

Cookieの主な用途は以下のとおりです!

  1. セッション管理
    ログイン情報、ショッピングカートの内容、ゲームのスコアなどの情報を管理します。
  2. パーソナライゼーション
    ユーザーの設定、テーマ、ユーザーインターフェースの設定などを保存します。
  3. トラッキング
    ユーザーの行動やサイトの訪問パターンを追跡します。

よくサイトを開いたときにこんな感じで表示されますよね!

Sessionとは

Sessionは、サーバー側で生成され、特定のユーザーに関連する一時的なデータを保管します。

Sessionの主な用途は以下のとおりです!

  1. ユーザー認証
    ユーザーがログインすると、サーバーはセッションIDを生成し、それをユーザーのブラウザに送信します。ブラウザはこのセッションIDを保存し、次回以降のリクエストに含めることでユーザーを認証します。

  2. ユーザー追跡
    ユーザーのアクティビティをサーバー側で追跡します。たとえば、ユーザーが商品をカートに追加すると、その情報はユーザーのセッションに保存されます。

複数のサーバーでシステムが稼働している場合、ユーザーのリクエストがどのサーバーに到達するかは一定ではないため、セッション管理は複雑になります。

このような場合、セッション用のデータベースを用意したり、サーバー間でセッション情報を共有するなどが必要となります🤔

CookieとSessionの違いって?

ウェブサイトやウェブアプリケーションの要件によりますが、
CookieとSessionは異なる目的と利用シーンを持つため、多くの場合で両方が一緒に使われます。

主な違いは、データが保存される場所とデータの生存期間です。
Cookieはクライアント(ユーザーのブラウザ)に保存され、特定の有効期限が設定されます。

一方、Sessionはサーバー側に保存され、通常はユーザーがログアウトするか、
一定時間アクティビティがないと終了します。

また、Cookieはブラウザがサーバーにリクエストを送るたびにサーバーに送信されますが、
Sessionはサーバー内に保管され、ブラウザはSession IDだけを保持します。

  • Cookieは、ブラウザで保持されるデータ
  • Sessionは、Webサーバーで保持されるデータ

CookieとSessionの保存期間って?

  • Cookie

Cookieの保存期間は、Cookieを設定する際に指定される有効期限(ExpiresまたはMax-Age属性)によります。有効期限が指定されなかった場合、そのCookieは「セッションCookie」と呼ばれ、ブラウザが閉じられると同時に削除されます!
一方で、有効期限が指定されている場合、そのCookieは指定された期間が経過するまでブラウザに保存されます。

  • Session

Sessionの保存期間は通常、サーバーの設定に依存します。多くの場合、ユーザーがログアウトするか、一定時間アクティビティがないとセッションは終了します(これをセッションの「タイムアウト」と呼びます)。
この一定時間も設定によりますが、多くのウェブアプリケーションでは15分から30分の範囲で設定されることが多いです。

これらの期間はウェブアプリケーションの要件やセキュリティポリシーにより変更可能で、
ユーザー自身がブラウザの設定でCookieの保存期間を制御したり、
任意でCookieを削除したりすることも可能です🙆🏻‍♀️

CookieとSessionのセキュリティについて

CookieとSessionの不適切な使用は、セキュリティ上の問題を引き起こす可能性があります。

例えば、暗号化されていない通信経路でCookieを送信すると、第三者に情報を盗まれるリスクがあります。また、JavaScriptからCookieを不適切にアクセスされると、クロスサイトスクリプティング(XSS)攻撃の危険性があります。

これらのリスクを軽減するためには、次のようなセキュリティ対策が推奨されます🤔

  • HTTPSを使用して、通信経路でのデータの漏洩を防ぐ
  • Secureフラグを設定して、CookieがHTTPS経由でのみ送信されるようにする
  • HttpOnlyフラグを設定して、JavaScriptからのCookieへのアクセスを防ぐ

さいごに

CookieとSession、それぞれの特性と、セキュリティ対策の重要性を理解することが必須ですね!

参考にさせていただいた記事🌱

https://qiita.com/hththt/items/07136ad74127999df271

cookieとは
https://wa3.i-3-i.info/word1725.html

セッションIDとは
https://wa3.i-3-i.info/word15940.html

そして、今日も週一の勉強会でした👀
みんな新しい環境で前向きに頑張っていて、
勉強会に行く度に私も頑張らねば、とまた立ち上がれます!💪🏻

明日も頑張りましょ〜〜

Discussion