クッキーとセッションについて


クッキーとセッション

Cookie

  • サーバーとクライアント間で状態を管理するためにクライアントのブラウザに保持される情報のこと.
  • HTTPはステートレスなプロトコルであるため, 状態を保持するために使用される.

Cookieのやり取り

  • サーバーからクライアントにCookieを送る場合はSet-Cookieヘッダーを使用する.
Set-Cookie: <cookie-name>=<cookie-value>
  • クライアントからサーバーにはCookieヘッダーでCookieを送信する.
Cookie: <cookie-name>=<cookie-value>

Cookieの仕様

Expires, Max-Age

  • Expiresでは有効期限を日時で指定する. Max-Ageでは有効期間を秒で指定する. ExpiresとMax-Age両方指定された場合はMax-Ageが優先される.
Set-Cookie: Id=0001;Expires=Mon, 1 Jan 2020 01:01:01 GMT;
Set-Cookie: Id=0p01;Max-Age=600;
Set-Cookie: Id=0001;Expires=Mon, 1 Jan 2020 01:01:01 GMT;Max-Age=600;

Secure

  • Secureを指定するとHTTPS通信でのみCookieがサーバーに送信される.
Set-Cookie: Id=0001;Secure;

HttpOnly

  • HttpOnlyを指定するとJavaScriptのAPI(Document.cookie)からCookieにアクセスすることが出来なくなる. XSS対策として有効である.
SetCookie: Id=0001;HttpOnly;

Domain

  • DomainでCookieが送信される範囲を制限することが出来る. Domainを指定した場合, 指定されたドメインとサブドメインにCookieが送信される. 例えばDomain=sample.comとした場合, ドメインであるsample.comの他にサブドメインであるaaa.sample.com, bbb.sample.comにもCookieは送信される. Domainを指定しない場合はSet-Cookieを送信したホストのみにCookieが送信される. サブドメインに送信したくない場合はDomainを指定しないようにする必要がある.
Set-Cookie: Id=0001;Domain=sample.com;

Path

  • Pathを指定すると指定した値をURLを含む場合にCookieを送信する. 例えば/rootを指定した場合, /root/index.html, /root/Item/search.html等URLにPathで指定した値が含まれる場合にCookieを送信する.
Set-Cookie: ID=0001;Path=/root;

Cookieの種類

セッションクッキー

  • ExpiresまたはMax-Ageが指定されていないCookieのこと.
  • 作成したCookieはデフォルトでセッションクッキーである.
  • クライアントがブラウザを終了した場合にCookieが削除される.

持続的クッキー

  • 永続クッキーともいう.
  • ExpiresまたはMax-Ageが指定されたCookieのこと.
  • 指定された日時または期間が過ぎるとCookieが無効になる.

ファーストパーティクッキー

  • 閲覧しているページのドメインが発行したCookieのこと.

サードパーティクッキー

  • 閲覧しているページとは異なるドメインが発行したCookieのこと.

Session

  • HTTPはステートレスなプロトコルであるため, 1回のリクエストに対して1回のレスポンスで通信は完結してしまい, 各通信は別のものとして扱われる.
  • システムにログインして買い物をする等の一連の通信を同一クライアントからの通信であると判別し管理する仕組みをセッション管理という.
  • 通常, システムにログインするとサーバーがセッションIDを発行し, Cookieに付与してクライアントに送信する. 以降クライアントはCookieにセッションIDを付加し, リクエストを送信することでサーバーはどのクライアントからの通信であるかを判別する.
  • サーバーではセッションIDごとに情報を管理する. 例えば, ECサイトの買い物カゴに入れた商品等.

参考