あえてCookieにデータ保持しなきゃいけないシチュエーションってそんなに多くない気もしますが...。
強いて言うならこれくらいな気がします。
-
HttpOnly
属性でセキュアにしたい - データごとに保持期限を変えたい
そこで今回は、PHPでのCookieの設定・取得・削除についてまとめてみました。
PHP標準関数とSymfonyが用意しているComponentを利用した2パターン紹介します。
Cookie設定
PHP標準関数の場合
setcookie(
'cookie_name', // Cookieの名前
'cookie_value', // Cookieの値
time() + 3600, // 有効期限(例:1時間後)
'/', // パス
null, // ドメイン
false, // セキュア
true, // HttpOnly
)
HttpFoundationを使う場合
use Symfony\Component\HttpFoundation\Cookie;
// Cookieを作成
$cookie = new Cookie(
'cookie_name', // Cookieの名前
'cookie_value', // Cookieの値
time() + 3600, // 有効期限(例:1時間後)
'/', // パス
null, // ドメイン
false, // セキュア
true, // HttpOnly
false, // Raw
'' // SameSite
);
// レスポンスオブジェクトにCookieを追加
$response->headers->setCookie($cookie);
$response->send();
Cookie取得
PHP標準関数の場合
echo $_COOKIE['cookie_name'];
HttpFoundationを使う場合
use Symfony\Component\HttpFoundation\Request;
// リクエストからCookieを取得
$request = Request::createFromGlobals();
echo $request->cookies->get('cookie_name');
Cookie削除
PHP標準関数の場合
PHP公式ページに記載している内容です。
必ず有効期限を過去に設定しないといけないんですね。
例2 setcookie() による削除の例
クッキーを削除する場合には、ブラウザの削除機構を起動するために 必ず有効期限を過去に設定する必要があります。 次に、先ほどの例で送信したクッキーを削除する例を示します。<?php // 有効期限を一時間前に設定します setcookie("TestCookie", "", time() - 3600); setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1); ?>
HttpFoundationを使う場合
必ず有効期限を過去に設定しないといけないんですね。
こっちも同じかい...。
$cookie = new Cookie('cookie_name', null, time() - 3600);
$response->headers->setCookie($cookie);
$response->send();
まとめ
基本的にSessionやLocalStorage等で間に合う要件が多いかと思いますが、以下のシチュエーションではCookieを使う場面も出てきますよね。
-
HttpOnly
属性でセキュアにしたい - データごとに保持期限を変えたい
ついで。
Cookieにオブジェクトは格納できません。
仮にオブジェクトをCookie保持場合はJSON形式にしましょう。(またはSerialize)
// 設定時
$data = json_encode($object);
$data = serialize($object);
// 取得時
$data = json_decode($object);
$data = unserialize($object);
Http Foundation インストール
composer require symfony/http-foundation
参考