Torihaji's Growth Diary

Little by little, no hurry.

cookieについて

はじめに

どうも、torihaziです

今日は最近開発している際に触れることの多い、"Cookie"について

調べてみました。

というのも あまりよく知らずに使っていたからです。

httpOnlyとか samesiteなんとかとか。

それぞれがなんのために必要かとかは辞書的な意味はちょこっと入っているけれど

実際に人が納得できるくらいに説明できると聞かれたら否なので

これを機に調べてみることにしました。

随時書き足すか他記事で更新します。

Cookieとは

Webサイトが ユーザのブラウザに保存する小さなテキストファイルのこと

これによりwebサイトはユーザの情報を記憶し、次回訪問時にその保持した情報を使い回すことができる。

用途

調べた感じ、よくあるものは次のとおり

  1. セッション管理(例:ログイン状態の維持)
  2. ユーザー設定の記憶(例:ダークモード設定、言語設定)
  3. ラッキング・分析(例:アクセス解析、広告配信の最適化)

キャッシュとの違い

Webサイトが情報を保存するということで、キャッシュとは何が違うのかと疑問が生じますが

その違いは下記のようです。

cookieはユーザの個人データを、キャッシュはWebページのコンテンツを保持する

例えばキャッシュは 画像などの静的リソースを保持し、次回読み込み時に使用して読み込みを高速化したりする

ために使われます。

開発者がしておいた方がいい設定可能な属性について

ここが特に私が知っておくべき情報でした。

開発をしていて HttpOnly samesite とか色々設定できますよね。

それらについて調べてみると

  • Domain属性: Cookieが送信される対象ドメインを指定 指定されたドメインとそのサブドメインのみがCookieにアクセス可能

  • Path属性: Cookieが有効となるサーバー上のパスを指定 指定されたパスとそのサブパスのリクエスト時のみCookieが送信される

  • Expires/Max-Age属性: Cookieの有効期限を設定 Expiresは特定の日時、Max-Ageは秒単位の期間を指定 設定しないとそれはブラウザが立ち上がっている間のみ有効となるセッションクッキーとなる。

  • Secure属性: HTTPSプロトコルを使用している場合のみCookieが送信されるよう制限 通信の暗号化を強制することでセキュリティを向上 ただCookieの内容自体が暗号化されるわけではない。

  • HttpOnly属性: Cookiehttps通信上のみで利用。 JavaScriptスクリプト(document.cookieなど)からのアクセスを禁止。

  • SameSite属性: クロスサイトリクエストによるCookieの送信を制御 値として「Strict」、「Lax」、「None」を設定可能

Cookieの種類

調べたところ、分かったのは2つ

Set-Cookieヘッダって何

これは例えばRailsにおいてcookiesメソッドで設定した場合、responseヘッダに設定されるもの。

これがresponseヘッダにあるとブラウザはその値をCookieに保存してくれる。

しかし、cookiesメソッドで指定されるオプションによって保存してくれたりしなかったりする。

参考文献

cookie(クッキー)とは?有効・削除の方法や危険性を解説