はじめに
どうも、torihaziです
今日は最近開発している際に触れることの多い、"Cookie"について
調べてみました。
というのも あまりよく知らずに使っていたからです。
httpOnlyとか samesiteなんとかとか。
それぞれがなんのために必要かとかは辞書的な意味はちょこっと入っているけれど
実際に人が納得できるくらいに説明できると聞かれたら否なので
これを機に調べてみることにしました。
随時書き足すか他記事で更新します。
Cookieとは
Webサイトが ユーザのブラウザに保存する小さなテキストファイルのこと
これによりwebサイトはユーザの情報を記憶し、次回訪問時にその保持した情報を使い回すことができる。
用途
調べた感じ、よくあるものは次のとおり
キャッシュとの違い
Webサイトが情報を保存するということで、キャッシュとは何が違うのかと疑問が生じますが
その違いは下記のようです。
cookieはユーザの個人データを、キャッシュはWebページのコンテンツを保持する
例えばキャッシュは 画像などの静的リソースを保持し、次回読み込み時に使用して読み込みを高速化したりする
ために使われます。
開発者がしておいた方がいい設定可能な属性について
ここが特に私が知っておくべき情報でした。
開発をしていて HttpOnly 、 samesite とか色々設定できますよね。
それらについて調べてみると
Domain属性: Cookieが送信される対象ドメインを指定 指定されたドメインとそのサブドメインのみがCookieにアクセス可能
Path属性: Cookieが有効となるサーバー上のパスを指定 指定されたパスとそのサブパスのリクエスト時のみCookieが送信される
Expires/Max-Age属性: Cookieの有効期限を設定 Expiresは特定の日時、Max-Ageは秒単位の期間を指定 設定しないとそれはブラウザが立ち上がっている間のみ有効となるセッションクッキーとなる。
Secure属性: HTTPSプロトコルを使用している場合のみCookieが送信されるよう制限 通信の暗号化を強制することでセキュリティを向上 ただCookieの内容自体が暗号化されるわけではない。
HttpOnly属性: Cookieをhttps通信上のみで利用。 JavaScriptのスクリプト(document.cookieなど)からのアクセスを禁止。
SameSite属性: クロスサイトリクエストによるCookieの送信を制御 値として「Strict」、「Lax」、「None」を設定可能
Cookieの種類
調べたところ、分かったのは2つ
Set-Cookieヘッダって何
これは例えばRailsにおいてcookiesメソッドで設定した場合、responseヘッダに設定されるもの。
これがresponseヘッダにあるとブラウザはその値をCookieに保存してくれる。
しかし、cookiesメソッドで指定されるオプションによって保存してくれたりしなかったりする。