0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Cookieを実装するにあたって得た基本的な知識をまとめた記事です。

Cookieとは?

Cookieは、Webサーバーがクライアント(ブラウザ)に保存を依頼する小さなテキストファイルです。
ブラウザは、Cookieを保存したり、新しいCookieを作成したり、既存のCookieを変更したり、後でリクエストして同じサーバーにヘッダーとして送り返すことがあります。

使用目的

  • セッション管理:
    ユーザーのサインインステータス、ショッピングカートの内容、ゲームのスコア、またはサーバーが覚えておく必要があるその他のユーザーセッション関連の詳細。
  • パーソナライゼーション:
    表示言語やUIテーマなどのユーザー設定。
  • トラッキング:
    ユーザーの行動の記録と分析。

Cookieの特徴

  • サイズ制限:
    通常4KB程度
  • 有効期限:
    一時的(セッションCookie)または永続的に設定可能
  • セキュリティオプション:
    HTTPSのみ、HttpOnly、Secure属性などでセキュリティを強化できる

Set-Cookieの中身

Set-Cookieは、サーバーからブラウザに送信されるヘッダーで記載された、Cookie設定命令です。
複数のパラメータで詳細な制御が可能になっています。

基本構文

name=valueのセットでCookieの名前と値を指定しています。

Set-Cookie: name=value; [属性1]; [属性2]; ...

主要属性

1. Expires

  • Cookieの有効期限を日付形式で設定し、その日時を過ぎると自動的に削除される
  • 例: Expires=Wed, 21 Oct 2024 07:28:00 GMT

2. Max-Age

  • Cookieの有効期間を秒単位で指定する方式
  • 例: Max-Age=3600(1時間有効)

3. Domain

  • Cookieが有効なドメインを指定
  • サブドメインへの共有も制御可能
  • 例: Domain=example.com

4. Path

  • Cookieが有効なWebサイト上のパスを制限
  • 例: Path=/admin(管理画面のみ)

5. Secure

  • HTTPS接続の場合のみCookieを送信
  • セキュリティ向上に貢献
  • 例: Secure (実装ではtrue falseで記載することも)

6. HttpOnly

  • クライアントサイドスクリプト(JavaScript)からのアクセスを禁止
  • XSS(クロスサイトスクリプティング)対策に有効
  • 例: HttpOnly (実装ではtrue falseで記載することも)

7. SameSite

  • クロスサイトリクエストでのCookie送信を制御
  • セキュリティとプライバシー保護に重要
  • 例:
  • SameSite=Strict: 同一サイト内のみ送信
  • SameSite=Lax: トップレベルナビゲーションで送信
  • SameSite=None: あらゆる状況で送信(Secureと併用必須)

セッションCookie

1,2のどちらも使っていないCookieをセッションCookieと呼びます。

MDN Web Docsでは以下のように説明されています

現在のセッションが終了すると削除されます。ブラウザは「現在のセッション」の終了時期を定義し、再起動時にセッションの復元を使用するブラウザもあります。これにより、セッションクッキーは無期限に持続する可能性があります。

実際の設定例

Set-Cookie: sessionId=abc123; 
            Expires=Wed, 21 Oct 2024 07:28:00 GMT; 
            Domain=example.com; 
            Path=/; 
            Secure; 
            HttpOnly; 
            SameSite=Strict

この例では、sessionIdという名前のCookieに対して、有効期限、ドメイン、パス、セキュリティ設定を指定したものになります。

Cookieの送受信の仕組み

  1. クライアントがWebサーバーにリクエストを送信
  2. サーバーがレスポンスヘッダーでSet-Cookieを使用してCookieを設定
  3. ブラウザがCookieを保存
  4. 次回のリクエスト時にCookieヘッダーでサーバーに送信

具体的なユースケース

1. ユーザー認証におけるCookieの利用

2. ショッピングカートにおけるCookieの利用

3. ユーザー設定におけるCookieの利用(言語設定)

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?