PHP の Cookie の有効期限を設定する方法(expires, max-age)
新人
「PHP の Cookie の有効期限を設定する方法を知りたいのですが、どう設定すればいいですか?」
先輩
「Cookie の有効期限を設定すると、一定時間後に自動的に削除されたり、ブラウザを閉じても保持されたりするんだ。用途に応じて設定方法が変わるよ。」
新人
「具体的にはどんな設定方法があるんですか?」
先輩
「主に expires
と max-age
の2つの方法があるよ。まずは Cookie の有効期限について基本から説明するね!」
1. Cookieの有効期限とは?(基本的な説明)
Cookie の有効期限とは、Cookie がブラウザに保存される期間のことです。Cookie には大きく分けて次の2種類があります。
- セッション Cookie: ブラウザを閉じると削除される Cookie
- 持続的 Cookie: 有効期限が設定されている Cookie
セッション Cookie は、ユーザーがブラウザを閉じた瞬間に削除されます。一方、持続的 Cookie は、設定された時間までブラウザに保存され続けます。
持続的 Cookie の有効期限を設定するには、setcookie()
関数を使用し、expires
や max-age
を指定します。
2. Cookieの有効期限を設定する理由
なぜ Cookie に有効期限を設定する必要があるのでしょうか?主な理由は以下の通りです。
- ユーザーの利便性向上: ログイン情報や設定を保持し、次回のアクセス時に自動入力を可能にする。
- セキュリティ強化: 一定時間経過後に自動的に削除し、不正利用を防ぐ。
- サーバー負荷の軽減: 不要な Cookie を削除し、不要なデータを管理しないようにする。
例えば、ログイン情報を 1 週間保持したい場合は、expires
を使って 7 日間の有効期限を設定します。逆に、セキュリティを考慮して短時間で削除する場合は 1 時間や 30 分などの短い有効期限を設定することもあります。
次のセクションでは、具体的に Cookie の有効期限を設定する方法について解説します。
3. Cookieの有効期限を設定する方法(expiresの使い方)
Cookie の有効期限を設定する方法のひとつに expires
があります。これは、Cookie の有効期限を「特定の日時」に設定するものです。
PHP で expires
を設定するには、setcookie()
関数の第3引数に、期限を示すタイムスタンプ(Unix タイム)を指定します。
setcookie("username", "Taro", time() + 86400, "/");
上記のコードでは、「username」という Cookie を 1 日(86400秒)後に期限切れに設定しています。
また、特定の日付まで有効な Cookie を作成したい場合は、strtotime()
を使うこともできます。
setcookie("session_id", "abc123", strtotime("+7 days"), "/");
このコードは、「session_id」という Cookie を 7 日後まで有効にします。
4. Cookieの有効期限を設定する方法(max-ageの使い方)
Cookie の有効期限を設定するもうひとつの方法に max-age
があります。これは、「現在の時刻からの秒数」で Cookie の寿命を指定します。
max-age
を指定する場合は、setcookie()
のオプションを利用して設定できます。
setcookie("user_theme", "dark", [
"expires" => time() + 86400, // 1日後
"path" => "/",
"secure" => true,
"httponly" => true,
"samesite" => "Strict"
]);
PHP では max-age
を直接指定する方法はなく、主に expires
を利用する形になりますが、HTTP ヘッダーで max-age
を設定することは可能です。
header("Set-Cookie: test_cookie=value; Max-Age=3600; Path=/; Secure; HttpOnly");
この設定では、「test_cookie」を 1 時間(3600 秒)保持するよう指定しています。
5. expires と max-age の違い
expires
と max-age
は、どちらも Cookie の有効期限を設定するための方法ですが、それぞれ以下の違いがあります。
設定方法 | 指定する値 | 対応ブラウザ |
---|---|---|
expires |
特定の日時(例: 2025年12月31日 23:59:59) | すべてのブラウザでサポート |
max-age |
現在時刻からの秒数(例: 3600 秒) | HTTP/1.1 以降でサポート(古いブラウザでは未対応) |
一般的には、expires
を使用する方が広くサポートされていますが、HTTP ヘッダーを操作する場合は max-age
を使うこともあります。
6. Cookieの有効期限を変更・削除する方法
一度設定した Cookie の有効期限を変更したり、削除したりすることができます。変更する場合は、新しい有効期限を指定して setcookie()
を再度実行します。
6.1 Cookieの有効期限を変更する
例えば、Cookie の有効期限を 1 週間から 30 日に延長する場合、以下のように記述します。
setcookie("user_token", "abc123", time() + (30 * 86400), "/");
このコードを実行すると、元々 1 週間の有効期限だった Cookie は 30 日に延長されます。
6.2 Cookieを削除する
Cookie を削除するには、有効期限を過去の時間に設定します。例えば、以下のように記述すると、すぐに Cookie が削除されます。
setcookie("user_token", "", time() - 3600, "/");
このコードでは、有効期限を 1 時間前に設定することで、ブラウザが Cookie を削除します。
7. Cookieの有効期限を設定する際の注意点
Cookie の有効期限を設定する際には、以下の点に注意が必要です。
7.1 ユーザーのプライバシーに配慮する
Cookie には個人情報を保存しないようにしましょう。特に、パスワードやクレジットカード情報を直接保存するのは危険です。
7.2 短すぎる有効期限はユーザーの不便につながる
有効期限が短すぎると、ユーザーがログインするたびに情報がリセットされるため、不便に感じることがあります。用途に応じて適切な期間を設定しましょう。
7.3 長すぎる有効期限はセキュリティリスクになる
逆に、有効期限が長すぎると、不正に Cookie を利用されるリスクが高まります。ログイン情報などの重要な Cookie には適切な期限を設定しましょう。
8. Cookieの有効期限を活用した実践的な例(ログイン情報の保存など)
実際に Cookie の有効期限を活用する例として、ログイン情報の保存を考えてみましょう。
8.1 ログイン情報を一定期間保持する
ログインフォームで「次回もログインを維持する」オプションを選択した場合、Cookie にユーザー情報を保存し、一定期間ログイン状態を保持することができます。
if ($_POST["remember_me"] === "on") {
setcookie("user_email", $_POST["email"], time() + (30 * 86400), "/");
}
このコードでは、「remember_me」がチェックされている場合、ユーザーのメールアドレスを 30 日間 Cookie に保存します。
8.2 次回アクセス時に自動ログインする
保存した Cookie を利用して、ユーザーがサイトを再訪問した際に自動ログインさせることができます。
if (isset($_COOKIE["user_email"])) {
echo "ようこそ、" . htmlspecialchars($_COOKIE["user_email"], ENT_QUOTES, 'UTF-8') . " さん!";
} else {
echo "ログインしてください。";
}
このコードを実行すると、Cookie に保存されているメールアドレスがあれば、自動的にログインメッセージを表示します。
8.3 セキュアなログイン Cookie の設定
ログイン Cookie をより安全に扱うために、secure
や httponly
を設定することを推奨します。
setcookie("auth_token", "xyz456", [
"expires" => time() + 86400,
"path" => "/",
"secure" => true,
"httponly" => true,
"samesite" => "Strict"
]);
この設定を行うことで、Cookie は HTTPS 通信時のみ送信され、JavaScript からのアクセスも禁止されます。