【PHP8.x】COOKIE定数の使い方

COOKIE定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

COOKIE定数は、PHPのDateTimeクラスに属し、HTTPクッキーの有効期限(Expires属性)を指定する際に使用される、特定の日付フォーマット文字列を表す定数です。具体的には、ウェブサーバーがクライアント(ウェブブラウザ)にクッキーを送信する際、そのクッキーがいつまで有効であるかを示すために国際的に定められた標準的な日付時刻の書式「l, d-M-Y H:i:s T」(例: Tuesday, 20-Dec-2022 10:30:00 UTC)を提供します。

システムエンジニアを目指す初心者の方にとって、ウェブアプリケーション開発ではユーザーのセッション管理やデータの永続化のためにクッキーが頻繁に利用されます。クッキーの有効期限を設定することは非常に重要であり、このCOOKIE定数はその際に役立ちます。

例えば、DateTimeオブジェクトで現在時刻や将来の時刻を作成し、そのオブジェクトのformat()メソッドの引数にDateTime::COOKIEを指定することで、手軽にクッキーのExpires属性に適合する日付文字列を生成できます。これにより、手動で複雑なフォーマット文字列を記述する手間を省き、タイプミスによるエラーを防ぎながら、HTTPの仕様に準拠した形でクッキーの有効期限を正確に設定することが可能になります。

この定数を使用することで、開発者はクッキー関連の機能をより安全かつ効率的に実装できるようになります。ウェブ標準に沿った日付フォーマットの利用は、異なるブラウザやシステム間での互換性を保証するためにも不可欠です。

構文(syntax)

1<?php
2echo DateTime::COOKIE;
3?>

引数(parameters)

戻り値(return)

string

DateTime::COOKIE は、HTTP Cookie の日付フォーマットを表す文字列 "D, d M Y H:i:s e" を返します。

サンプルコード

PHPでCookieを削除する

1<?php
2
3/**
4 * 指定された名前のCookieを削除する関数。
5 * Cookieを削除するには、ブラウザに対し有効期限が過去のCookieを再設定することで削除を促します。
6 *
7 * @param string $name 削除するCookieの名前。
8 * @param string $path Cookieのパス。設定時と同じパスを指定する必要があります。
9 * @param string $domain Cookieのドメイン。設定時と同じドメインを指定する必要があります。
10 * @param bool $secure HTTPS接続でのみCookieを送信するかどうか。設定時と同じ値を指定する必要があります。
11 * @param bool $httponly JavaScriptからアクセスできないようにするかどうか。設定時と同じ値を指定する必要があります。
12 */
13function deleteCookie(
14    string $name,
15    string $path = '/',
16    string $domain = '',
17    bool $secure = false,
18    bool $httponly = false
19): void {
20    // Cookieの有効期限を過去に設定することで、ブラウザにCookieの削除を促します。
21    // DateTime::COOKIE はクッキーの日付フォーマット(例: "Wed, 23-Nov-2022 10:00:00 GMT")を表す定数ですが、
22    // setcookie() 関数は有効期限としてUNIXタイムスタンプ(整数)を要求します。
23    // ここでは現在時刻より1時間前のタイムスタンプを使用します。
24    $pastTime = new DateTime();
25    $pastTime->modify('-1 hour');
26    $expirationTimestamp = $pastTime->getTimestamp();
27
28    // setcookie() を呼び出します。Cookieを設定した時と同じ$path, $domain, $secure, $httponlyの値を
29    // 指定することが非常に重要です。これらの値が一致しないとCookieは削除されません。
30    // この関数はHTTPヘッダーを送信するため、プログラムの他の出力よりも前に呼び出す必要があります。
31    setcookie($name, '', $expirationTimestamp, $path, $domain, $secure, $httponly);
32
33    echo "Cookie '{$name}' の削除リクエストを送信しました。" . PHP_EOL;
34}
35
36// --- 使用例 ---
37// 実際にCookieの削除を確認するには、このスクリプトを実行する前に
38// 対象のCookieがブラウザに設定されている必要があります。
39// 例: setcookie('my_app_cookie', 'user_session_id', time() + 3600, '/', '', false, true);
40
41// 'my_app_cookie' という名前のCookieを削除する例。
42// このCookieがパス '/'、ドメイン空(現在のドメイン)、secure=false、httponly=true で
43// 設定されていると仮定します。設定時の引数に合わせて変更してください。
44deleteCookie('my_app_cookie', '/', '', false, true);
45
46// 特定のパスを持つCookieを削除する場合の例:
47// deleteCookie('admin_cookie', '/admin/', 'example.com', true, true);
48
49?>

PHPでCookieを削除するサンプルコードです。Cookieは、有効期限が過去の同じ名前のCookieをブラウザに再送信することで削除されます。

このコードは、指定されたCookieを削除するdeleteCookie関数を定義しています。引数$nameは削除するCookieの名前です。$path$domain$secure$httponlyには、Cookie設定時とまったく同じ値を指定することが重要です。一致しない場合、削除は行われません。

関数内部では、現在時刻より前のUNIXタイムスタンプを算出し、setcookie()関数でCookieの有効期限を過去に設定しています。setcookie()関数はHTTPヘッダーを送信するため、プログラムが出力を行う前に呼び出す必要があります。

DateTime::COOKIEはCookieの日付フォーマット定数ですが、setcookie()関数は有効期限にUNIXタイムスタンプ(整数)を要求するため、このコードでは直接使用していません。

この関数の戻り値はvoidで、Cookie削除の指示をブラウザに送信します。

Cookie削除には、setcookie関数でCookieを設定した時と全く同じpathdomainsecurehttponlyの値を指定することが非常に重要です。これらの値が一つでも異なるとCookieは削除されません。また、setcookie関数はHTTPヘッダーを送信するため、プログラムのechoなどの出力よりも前に呼び出す必要があります。DateTime::COOKIE定数は日付の書式を表すもので、setcookie関数の有効期限にはUNIXタイムスタンプ(整数)を指定します。このサンプルコードはCookieの削除リクエストをブラウザに送信するものですので、実際に削除されたかどうかはブラウザの開発者ツールで確認してください。

PHP DateTime::COOKIEでCookie日付フォーマットを生成する

1<?php
2
3/**
4 * DateTime::COOKIE 定数を使用して、HTTP CookieのExpires属性などで使われる
5 * 日付フォーマット文字列を生成するサンプルコードです。
6 *
7 * この定数自体はHTTP Cookieの値を「取得」するものではなく、
8 * HTTP Cookieの有効期限などを「設定」する際の日付書式を指定するために使用します。
9 */
10function showDateTimeCookieFormat(): void
11{
12    // DateTime::COOKIE 定数の値そのものを表示します。
13    // この定数は "D, d-M-Y H:i:s T" の形式の文字列を保持しています。
14    echo "DateTime::COOKIE 定数の値: " . DateTime::COOKIE . "\n\n";
15
16    // 現在の日時を表すDateTimeオブジェクトを作成します。
17    $now = new DateTime();
18
19    // DateTime::COOKIE フォーマット定数を使って、現在の日時を文字列に変換します。
20    // この形式は、HTTPヘッダーの 'Set-Cookie' で有効期限 (Expires) を設定する際に利用されます。
21    $formattedNow = $now->format(DateTime::COOKIE);
22    echo "現在の日時をDateTime::COOKIEフォーマットで表示: " . $formattedNow . "\n";
23
24    // 例として、現在から1時間後の日時を作成し、Cookieの有効期限としてフォーマットします。
25    $expireTime = (new DateTime())->modify('+1 hour');
26    $formattedExpireTime = $expireTime->format(DateTime::COOKIE);
27    echo "1時間後の日時をCookieの有効期限フォーマットで表示: " . $formattedExpireTime . "\n\n";
28
29    // MEMO: 実際のHTTP Cookieを設定する場合、以下のようにExpires属性にこのフォーマット文字列を使います。
30    // このコードではHTTPヘッダーの出力は行いません。
31    // header("Set-Cookie: example_name=example_value; Expires=" . $formattedExpireTime . "; Path=/");
32    echo "このフォーマットは、主にHTTP Cookieの有効期限を設定する際に利用される、標準的な日付形式です。\n";
33}
34
35// サンプルコードを実行します。
36showDateTimeCookieFormat();
37
38?>

DateTime::COOKIE定数は、PHPのDateTime拡張機能に属する定数で、HTTP CookieのExpires属性などで日付や時刻のフォーマットを指定するために使用されます。この定数自体はCookieの値を「取得」するものではなく、Cookieの有効期限を「設定」する際の日付書式を提供するものです。

DateTime::COOKIE定数は引数を取らず、戻り値として"D, d-M-Y H:i:s T"という形式の文字列を返します。この文字列は、Webサーバーとブラウザ間でCookieの有効期限をやり取りする際に標準的に使われる日付書式を定義しています。

サンプルコードでは、まずDateTime::COOKIE定数に格納されているフォーマット文字列そのものが表示されます。次に、new DateTime()で現在のDateTimeオブジェクトを作成し、そのformat()メソッドにDateTime::COOKIE定数を渡すことで、現在の日時をCookieの有効期限に適した形式に変換しています。例えば、Mon, 01-Jan-2024 12:00:00 UTCのような形式で出力されます。さらに、現在から1時間後の日時を設定し、同様にフォーマットした例も示されており、実際のHTTPヘッダーのSet-CookieExpiresの値としてこの形式が利用されることを具体的に理解できます。

この定数を使用することで、開発者はHTTP Cookieの有効期限を設定する際に標準的な日付フォーマットを簡単に適用でき、ブラウザがCookieの有効期限を正確に解釈できるようになります。

DateTime::COOKIE 定数は、HTTP Cookieの値を「取得」するものではなく、主にCookieの有効期限(Expires属性)を設定する際に使用する標準的な日付フォーマット文字列「D, d-M-Y H:i:s T」を提供するものです。この定数自体は、書式指定のための文字列そのものを返します。

実際に現在の日時などをこのフォーマットで表示したい場合は、DateTime オブジェクトの format() メソッドに引数として DateTime::COOKIE を渡して利用します。これにより、Webブラウザが正しく解釈できるCookieの有効期限文字列を安全に生成できます。実際のCookieの送受信処理には setcookie() 関数や $_COOKIE グローバル変数など、別のPHP機能を使用することになりますので、用途の違いにご注意ください。

【PHP8.x】COOKIE定数の使い方 | いっしー@Webエンジニア