【PHP】Cookie(クッキー)の使い方(Expires、Path、Secure、HttpOnlyなどの使い方)

PHP

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はブラウザで改ざんが可能なため、基本的にはセッションを使います。

PHP

Posted by devsakaso