CookieとSessionとは?

CookieとSessionとは?

今回は、Web アプリケーション開発の学習をしていたら必ず出現する、Cookie と Session に付いてまとめたいと思います。

Cookie とは?

Cookie とは、ブラウザに情報を一時保存できる仕組みのことで、その情報は「key = value(値)」の形式で表されます。

Cookie は Web ブラウザが Web サーバ(Web アプリケーション)へアクセスした際に、HTTP レスポンスのヘッダ内に組み込まれてきます。そして、Web サーバから Cookie を受け取った Web ブラウザは、次回アクセス時はその Cookie をそのまま HTTP リクエスト・ヘッダに入れて送ります。

Web アプリケーション側では、リクエスト・ヘッダに入っている Cookie を見ることで、アクセスしてきた相手がどのような相手なのか知ることができます。

Cookie には期限を設定する事ができるので、その期限内であればブラウザを閉じても情報を保存することが出来ます。

Cooike の使用例

Cookie の使用例として、EC サイトなどでのショッピングカート機能が挙げられます。

カートに保存した情報を Cookie に保存しておくことで、一度ブラウザを閉じて再度サイトにアクセスした場合でも、カートに保存した情報を Cookie から読み取り表示することが出来ます。

また、Cookie には後述するセッション ID を保存してログイン状態などを管理することがあります。

過去に作成した Web サイトを例にブラウザに保存されている Cookie を確認してみます。このサイトは簡単なお問い合わせフォームが設置してあり、サイト全体は PHP で作られています。

ブラウザのデベロッパーツールを開いて、上部の「アプリケーション」タブを選択 → 左サイドバーの「ストレージ」→「Cookie」→ 表示されているドメインをクリックします。

img_01

「名前」の欄に、PHPSESSID と name がありますが、PHPSESSID はセッション ID で name はサイト内で独自に生成して Cookie に保存した値になります。

この値が存在していなければ初めてアクセスされたと判定し、ローディング画面を表示するように実装しています。

「Expires / Max-Age」はどちらも有効期限を示しています。Expires の場合は GMT(グリニッジ標準時)形式の日付が指定されており、Max-Age の場合は秒数を指定します。

「セッション」と表示されている場合は、ブラウザが閉じられるまで有効という意味になります。

Session とは?

Session とは、サーバ側で情報を一時保存する仕組みのことで、ログイン情報などユーザーを識別するために必要な情報をサーバ側に保存しておくことができます。

Cookie と違い、サーバ側に保存するので Cookie よりもセキュリティに優れています。

今回の例の Web サイトでは PHP を使用していますが、PHP でセッションを利用するにはsession_start()と言う関数を実行しておく必要があります。この関数を実行することで自動でセッション ID を発行してくれます。

Session の使用例

一番身近に Session が使用されている例として、ログイン機能があります。

ユーザーが入力フォームからログイン情報を Web アプリケーションへ送信し、その情報がデータベース内に存在していればユーザー ID やログイン期限などをセッションに格納して認証後のページへ遷移するまでが一連の流れになります。

Session を利用することで、ユーザーごとに何かしらの状態を管理することができます。

HTTP 通信はステートレスな通信なため情報を保存する事ができません。ステートレスとは「状態を保たない」という意味になります。

「状態を保たない」とはどう言うことなのでしょうか?

例えば、あるページでユーザー情報を入力しログイン認証を行ったとします。そのページではログイン認証が済んでいますが、HTTP 通信は「ログインにしてる」という「状態」は保つことが出来ません。

その結果、別のページに遷移した際に「ログインしている」という状態は保たれません。

一度ログインした状態を保つために Session や Cookie が必要になってきます。

最後に

今回は Cookie と Session について学習したことをまとめました。

これらの仕組みは Web アプリケーションでは重要な役割を果たしています。適切に扱っていないとセキュリティ的に脆弱で危ない Web アプリケーションを作ってしまうかもしれません。

基本的な仕組みを知っていれば、今後セキュリティに関する学習にも役立ってくると思いますので参考になれば幸いです。

今後、セキュリティ対策についても学習を進めて行きたいと思います。