LoginSignup
3
5

【PHP】Cookie管理「設定・取得・削除」

Posted at

あえて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

参考

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5