【PHP】Cookie(クッキー)の使い方(Expires、Path、Secure、HttpOnlyなどの使い方)
PHPでCookie(クッキー)を使う方法を紹介します。
また、cookieのパラメータであるExpires、Path、Secure、HttpOnlyなどの使い方も紹介します。
PHPでCookie(クッキー)を設置するsetcookie()
setcookie()を使うことで、cookieを設置することができます。
ここでは、setcookie()の基本的な使い方を紹介します。
下の方で詳しくパラメータを紹介します。
setcookie('VIEW_COUNT', 1);
第一引数に、cookieの名前、第二引数にその値をとります。
上のようにすると、cookieにVIEW_COUNTという名前で値1が保持されます。
Cookieの確認方法
検証ツールを使います。
検証のNetworkタブを開き、Response Headersを探します。
Responseなので、サーバーから返ってきてセットされた内容となります。
その中に、Set-Cookieという項目に、キー=値の形で保持されていることが確認できます。
1回目の通信では、request headersには、cookieの値はありません。
2回目以降、サーバーからセットされて以降がrequest headersでもCookieが設定されていることを確認することができます。
検証ツールのApplicationのタブのStorageでもCookieの存在を確認することができます。
Strageの中にCookiesという項目の該当のURLをクリックすると、クッキーの詳しい情報が記載されています。
CookieはWebサイト毎に独立して保存される
CookieはWebサイト毎に保持する値となります。
そのため、検証ツールのApplicationなどで詳しく情報をみるときは、まずはWebサイト毎にクッキーが別れています。
他のサイトが設定したクッキーは見ることができません。
そのため、認証情報などは漏洩しません。
Cookieを取得する$_COOKIE
$_COOKIE['VIEW_COUNT'];
var_dump($_COOKIE['VIEW_COUNT']);
Cookieを取得するには、スーパーグローバル変数の$_COOKIEを使います。
$_COOKIEの値を変更する
$_COOKIE['VIEW_COUNT'];
$_COOKIE['VIEW_COUNT'] = 10; //これではresponse headerの情報は変更されない
var_dump($_COOKIE['VIEW_COUNT']);
上のようなやり方では、$_COOKIEの値を変更することはできません。
スーパーグローバル変数の値は、代入では変更できません。
必ず、setcookie()を使う必要があります。
setcookie()のパラメータ
setcookie('VIEW_COUNT', 1, [
'expires' => time() + 60 * 60 * 24,//クッキーの有効期限
'path' => '/' // '/'の場合はドメインのすべてのページ
]);
setcookie()は、第三引数を取ることができます。
連想配列の形式でさまざまな値を指定することができます。
上のようにすると、サーバーから有効期限が1日としてresponse headersにのってブラウザに返却されます。
クッキーの有効期限
クッキーの有効期限は、expiresに値を指定します。
よくある方法としては、time()を使って現在時刻を取得して、それに保存したい期間をプラスするという方法です。
- 60秒なら、+60
- 1時間なら + 60 * 60(1分×60)
- 1日なら、 + 60 * 60 * 24(1時間×24)
- 30日なら、 + 60 * 60 * 24 * 30(1日×30)
クッキーの有効パス
クッキーの有効範囲のパスはpathで指定できます。
クッキーの有効パスは、リクエストのときに、パスが一致するもの、もしくは、パスが包含するパスの場合クッキーが有効になります。
たとえば、'/'
ルートも場合、ドメインのすべてのページでそのクッキーの値を送ることができます。
特定のファイルまでのパスであれば、そのファイルのみクッキーの値が飛んでいくことになります。
セキュリティに関するパラメータSecure
Secureは、HTTPSのときのみやり取りされるクッキーのパラメータです。
trueかfalseかを指定します。
trueのとき、HTTPSで始まるURLのみクッキーをサーバーに対して送信することができます。
デフォルト値は、falseとなっています。
セキュリティに関するパラメータHttpOnly
HttpOnlyにtrueが設定されていると、JavaScriptからクッキーの値を操作することができなくなります。
ログイン情報などクッキーの情報の漏洩が困る場合は、HttpOnlyをtrueにすることで、
JavaScriptによる改変でもなりすましなどを防ぐことができます。
クッキーで訪問回数をカウントする
// 1回目訪問
$visitCount = 1;
if(isset($_COOKIE['VISIT_COUNT'])) {
// 2回目以降
$visitCount = $_COOKIE['VISIT_COUNT'] + 1;
}
setcookie('VISIT_COUNT', $visitCount);
echo '訪問回数:' . $_COOKIE['VISIT_COUNT'];
Cookieの場合、変数に一度値を格納して、それをsetcookieで値として保持するといった流れで実装できます。
一回目の訪問は変数の1をそのまま、2回目以降は条件分岐部分がtrueになるので、足した値が代入されて、それをsetcookieでセットしています。
ただし、Cookieはブラウザで改ざんが可能なため、基本的にはセッションを使います。