PHP アドバンス

PHP Cookies

1. クッキー(Cookie)とは何か?

クッキー(Cookie)とは、サーバーがユーザーのWebブラウザ内に保存する小さなテキストファイルのことです。このクッキーは、ブラウザからサーバーへの各HTTPリクエストと共に送信されます。

クッキーは、後で取得したい情報を保存しておくのに最適です。以下のような例で活用されます:

  • ユーザー名
  • ログイン状態の維持
  • ショッピングカートの内容
  • 言語設定
  • ユーザーアクティビティの追跡

2. PHPでクッキーを作成する

クッキーを作成するには、setcookie() 関数を使用します。

2.1 構文

setcookie(name, value, expire, path, domain, secure, httponly);

必須のパラメータは name のみです。その他のパラメータはすべて任意です。

  • name - 必須。クッキーの名前を指定します。
  • value - 任意。クッキーの値を指定します。
  • expire - 任意。クッキーの有効期限を指定します。
  • path - 任意。クッキーが有効なサーバー上のパスを指定します。
  • domain - 任意。クッキーが有効なドメイン名を指定します。
  • secure - 任意。クッキーをセキュアなHTTPS接続経由でのみ送信するかどうかを指定します。
  • httponly - 任意。TRUEに設定すると、HTTPプロトコル経由でのみクッキーにアクセス可能になります(JavaScriptからのアクセスを制限)。
注意: setcookie() 関数は、クッキーがHTTPヘッダーの一部であるため、必ず <html> タグよりも前に記述しなければなりません。

クッキーの値を取得するには、スーパーグローバル変数 $_COOKIE を使用します。

3. PHPでクッキーを作成・取得する

次の例では、「username」という名前のクッキーを「John Doe」という値で作成します。
有効期限は30日(86400秒 = 1日)に設定しています。
パスは「/」に設定しており、これはWebサイト全体でクッキーが利用可能であることを意味します(特定のディレクトリに限定することも可能です)。

クッキー「username」の値を取得するには、スーパーグローバル変数 $_COOKIE を使用します。
また、アクセスする前にクッキーが存在するかどうかを確認するために isset() 関数を使用します。

3.1 実装例

<?php
$cookie_name = "username";
$cookie_value = "John Doe";
// 有効期限を30日後に設定 (86400 * 30)
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
?>

<html>
<body>
<?php
if(isset($_COOKIE[$cookie_name])) {
  echo "クッキー '" . $cookie_name . "' がセットされています!<br>";
  echo "値は: " . $_COOKIE[$cookie_name];
} else {
  echo "クッキー名 '" . $cookie_name . "' はセットされていません。";
}
?>
</body>
</html>

注意:setcookie() 関数は必ず <html> タグより前に記述してください。
注意: クッキーを送信する際、値は自動的にURLエンコードされ、受信時に自動的にデコードされます(URLエンコードを防ぎたい場合は、代わりに setrawcookie() を使用してください)。

4. クッキーの値を変更する

クッキーの値を変更するには、単に setcookie() 関数を再度呼び出してクッキーをセットし直すだけです。

4.1 実装例

<?php
$cookie_name = "username";
$cookie_value = "Alex Porter";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>

<html>
<body>
<?php
if(isset($_COOKIE[$cookie_name])) {
  echo "クッキー '" . $cookie_name . "' がセットされています!<br>";
  echo "値は: " . $_COOKIE[$cookie_name];
} else {
  echo "クッキー名 '" . $cookie_name . "' はセットされていません。";
}
?>
</body>
</html>

5. クッキーを削除する

クッキーを削除するには、setcookie() 関数を使用して、有効期限に過去の時間を指定します。

5.1 実装例

<?php
// 有効期限を1時間前に設定して削除
setcookie("username", "", time() - 3600);
?>
<html>
<body>

<?php
echo "クッキー 'username' は削除されました。";
?>

</body>
</html>

6. クッキーが有効化されているか確認する

以下の例は、クッキーが有効になっているかどうかをチェックする簡単なスクリプトです。まず setcookie() 関数でテスト用のクッキーを作成し、次に $_COOKIE 配列変数の要素数をカウントします。

6.1 実装例

<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>

<?php
if(count($_COOKIE) > 0) {
  echo "クッキーは有効です。";
} else {
  echo "クッキーは無効になっています。";
}
?>

</body>
</html>