【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