Cookieとセッション
Cookieについて
-
Webブラウザに状態を持たせる技術: クッキーはクライアント側(ブラウザ)に情報を保存し、同じユーザーからのリクエスト間で状態を維持する技術です。具体的には、セッションIDやユーザーの設定情報などをブラウザ側に保存できます。
-
HTTPリクエストのヘッダ: クッキーはHTTPリクエストとレスポンスの両方に含まれます。サーバーはレスポンスヘッダに
Set-Cookie
を使ってクッキーを設定し、ブラウザは次のリクエスト時にクッキーをHTTPヘッダとしてサーバーに送信します(Cookie: name=value
という形式)。 -
クッキーは簡単に見えてしまう: クッキーはブラウザの開発者ツールなどを使えば、ユーザーが簡単に内容を見ることができます。そのため、クッキーに保存する情報は慎重に扱う必要があります。特に、機密情報をクッキーに保存するのは避けるべきです。もし保存する必要がある場合は、セキュリティ対策(例:
HttpOnly
、Secure
フラグの設定や暗号化)を行います。
Sessionについて
-
安全に状態を保存するための技術: セッションはサーバー側に状態を保存するための仕組みです。クライアント側(ブラウザ)にはセッションIDだけが保存され、実際のデータはサーバー側に保持されるため、より安全にユーザーの状態を管理できます。
-
最初のリクエストからセッションIDを発行してCookieに格納: セッションを使うと、サーバーはクライアントに一意のセッションIDを発行し、そのIDがクッキーとしてブラウザに送信されます。このセッションIDをブラウザは次回以降のリクエストでサーバーに送り返します。
-
2回目以降のリクエストにセッションIDを格納したCookieを渡す: ブラウザはセッションIDを持ったクッキーを毎回リクエスト時にサーバーに送ります。
-
CookieからセッションIDを取り出してメモリを参照: サーバーはリクエストで受け取ったセッションIDを元に、サーバー側に保存されているセッションデータ(通常はメモリやデータベース、ファイルなどに保存される)を参照し、適切なデータを取得します。セッションデータはサーバー側に保存されるため、クライアント側で改ざんされるリスクが低いです。
補足:
-
セッションの保存方法: サーバーがセッションデータをどこに保存するかは実装によって異なり、デフォルトではメモリやファイルに保存されることが多いですが、Redisやデータベースに保存する場合もあります。
-
クッキーの期限とセッションの有効期限: クッキーには期限を設定でき、期限が過ぎると自動的に削除されます。一方、セッションは通常、一定時間アクセスがなければサーバー側で期限切れ(タイムアウト)となり、削除されます。
まとめ
- Cookie: クライアント側(ブラウザ)にデータを保存し、HTTPリクエストに含めてサーバーに送る。
- Session: サーバー側にデータを保存し、クライアントにはセッションIDのみを保存して、そのIDを使ってサーバー側のデータを参照する。