概要
クッキーとセッションの違いをうまく説明できなかったので、クッキー、セッション、データベース、3つのデータを保存する方法の、調べたこと、自分の考えをまとめました。
##クッキー
特徴
-
クッキーを使うことでPHPが作成したデータをクライアントのPCに保存して、ブラウザを閉じてから一定期間、維持することが出来る。
-
保存されたクッキーデータは、保存したサイトへの以降のアクセスでHTTPリクエスト中のクッキーヘッダに常に含まれるようになる。
-
基本的に、クッキーはユーザー側の操作に関わらず、すべてのHTTPリクエストに含まれる。
-
クッキーはユーザーがブラウザの設定を変えることでブロックすることができる。
セッション
- セッションとは、ユーザーがWebサイトにアクセスし、ページ遷移し、ブラウザを閉じるまでの期間のこと。
- セッション変数を使うことでクッキーと同じ用に一定期間ユーザーごとのデータを維持することが出来る。
- セッション変数はその期間だけ値を使うことが出来る変数のこと。
- セッション変数は、サーバーの設定で有効期限が決められている。
クッキーとの違い
セッション変数のデータは、サーバーに保存される。
そのため、Webアプリ側に脆弱性がない限り、クライアントユーザーが簡単にデータを書き換えることができない。
セッション変数のデータは、閲覧ユーザーごとに作られ、ユーザーがWebブラウザを閉じたときに削除される。
使用用途
- ログイン認証の完了後、ブラウザを閉じるまでのログイン状態の維持
- 入力画面でユーザーが入力したデータの入力画面までの維持
セッション変数を保持した後、セッションIDを発行し、クライアントに送り、クッキーに保存する。
データベース
- クッキーのように簡単に偽装することができず、恒久的にデータを保存することが出来る。
- 安全性、保存期間の長さを考えるとデータベースに保存するのが最も良いが、保存したい情報ごとにデータベーステーブルを作ることになり、労力がかかる。
3つの保存形式の関係性
クッキー、セッション、データベースの特徴
値の変更による 脆弱性 |
保存期間 | データ容量 | 管理コスト | ||
---|---|---|---|---|---|
クッキー | 大 | 中 | 小 | 小 | クライアントサイド |
セッション | 中 | 短 | 小 | 小 | サーバーサイド |
データベース | 小 | 長 | 大 | 大 | サーバーサイド |
それぞれの特徴とメリット・デメリット
メリット | デメリット | 使いみち | |
---|---|---|---|
クッキー | ・Webサーバーがデータを保持する必要がない ・有効期限内であればWebブラウザを閉じてもデータを保持できる |
・書き換えが容易なため、機密性の高い情報は保持できない ・長期間は保存できない |
・クライアントサイドで扱うデータ ・一時的にしか使わないデータ |
セッション | ・早い ・使い捨てるため管理がしやすい |
・一定時間以上データを保持することができない ・ブラウザを閉じたタイミングで変数を消す必要がある |
・サーバーサイドで扱うデータ ・一時的にしか使わないデータ |
データベース | ・サイズに制限がない ・恒久的にデータを保存できる |
・管理するのに労力がかかる | ・ユーザー登録情報などの恒久的なデータを保存する |
この特徴をもとにデータを保存するときの判断基準を簡単な図で表すと
一時的ならDBじゃなくて良い(セッションorクッキー)、サーバー側で処理するならセッションに置いておけばよい。ブラウザでJavaScriptで利用するならクッキーを使う
まとめ
クッキー、セッション、データベース、全てデータを保存するという役割は同じ。
3種類のデータを保存する機能を特徴、役割についてまとめました。
扱うデータを決めたら、どの形式で保存するかを決める。
サーバー上で扱うデータなら、データベースとセッションを比較する、保存期間が長いデータならクッキーとデータベースを比較する。
勝手にクッキーとセッションは特別なものと思い込んでいて自分からわかりにくくしていました。「データを保存する機能」として考えて比較することで、イメージがしやすくなりました。
PHP本格入門が詳しく書いてあって学習しやすかったです。
参考文献
PHP本格入門上