カテゴリ: PHP 更新日: 2026/09/13

PHP の Cookie の有効期限を設定する方法(expires, max-age)

PHP の Cookie の有効期限を設定する方法(expires, max-age)
PHP の Cookie の有効期限を設定する方法(expires, max-age)

新人と先輩の会話形式で理解しよう

新人

「PHP の Cookie の有効期限を設定する方法を知りたいのですが、どう設定すればいいですか?」

先輩

「Cookie の有効期限を設定すると、一定時間後に自動的に削除されたり、ブラウザを閉じても保持されたりするんだ。用途に応じて設定方法が変わるよ。」

新人

「具体的にはどんな設定方法があるんですか?」

先輩

「主に expiresmax-age の2つの方法があるよ。まずは Cookie の有効期限について基本から説明するね!」

1. Cookieの有効期限とは?(基本的な説明)

1. Cookieの有効期限とは?(基本的な説明)
1. Cookieの有効期限とは?(基本的な説明)

まずは、そもそも「Cookie の有効期限」とは何かを押さえておきましょう。PHP の Cookie の有効期限とは、その Cookie がブラウザの中にどれくらいのあいだ残り続けるか、という寿命のようなものです。

Cookie には、大きく分けて次の 2 種類があります。

  • セッション Cookie:ブラウザを閉じると削除される、一時的な Cookie
  • 持続的 Cookie:あらかじめ決めた有効期限まで残り続ける Cookie

セッション Cookie は、ログイン中だけ使う「仮のメモ」のようなイメージです。ブラウザを閉じたタイミングで自動的に消えるので、長く残しておく必要がない情報に向いています。

一方で、持続的 Cookie は「何日間か覚えておきたい情報」を保存するときに使われます。例えば「ログイン状態を一週間覚えておく」や「サイトの表示テーマ(ライト/ダーク)を次回アクセス時まで保持する」といったケースです。設定した有効期限を過ぎると、その Cookie はブラウザから削除されます。

PHP では、特別なことをしない場合、次のようなコードで作成される Cookie はセッション Cookie になります。


setcookie("sample", "value");

このように有効期限を指定していない Cookie は、ブラウザを閉じると自動的に消える一時的な Cookie として扱われます。

逆に、ブラウザを閉じても一定期間は Cookie を残しておきたい場合は、「いつまで残すか」という有効期限を指定して持続的 Cookie にします。PHP では setcookie() 関数を使って、有効期限を表す値を渡すことでこの寿命をコントロールできます。

具体的な指定方法としては、後のセクションで解説する expiresmax-age を使って、有効期限を日付や秒数で細かく設定していきます。この章ではまず、「Cookie には期限があり、セッション Cookie と持続的 Cookie の 2 種類がある」という基本を押さえておけば十分です。

2. Cookieの有効期限を設定する理由

2. Cookieの有効期限を設定する理由
2. Cookieの有効期限を設定する理由

なぜ PHP の Cookie に有効期限を設定する必要があるのでしょうか。実は、Cookie の期限をきちんと決めるだけで、ユーザーの使いやすさや安全性が大きく変わります。特に初心者の方は「なんとなく必要そう」ではなく、理由を理解しておくことで後の実装がとても楽になります。

  • ユーザーの利便性向上: ログイン状態やサイト設定(テーマカラーなど)を覚えておくことで、次回アクセス時の入力作業を減らせる。
  • セキュリティ強化: 不正利用を防ぐために、一定時間が過ぎたら自動的に Cookie を削除して安全性を保つ。
  • サーバーやブラウザの負担軽減: 古く不要な Cookie が溜まらず、管理しやすくなる。

たとえば、「ログイン情報を1週間だけ保持したい場合」は 7 日分の有効期限を設定しますし、「個人情報を扱うため短い時間だけ保持したい」場合は 30 分などの短い期限に設定することもあります。用途に応じて、適切な期間を選ぶことがとても大切です。

以下は初心者向けのサンプルで、有効期限を設定した Cookie を作る例です。どれくらいの期間保持するか、具体的にイメージしやすくなります。


<?php
// 「サイト設定を覚えておく」という目的を想定した簡単な例
// ここでは Cookie を3日間残すサンプル
setcookie("site_mode", "dark", time() + (3 * 86400), "/");
?>

このコードでは、「site_mode」という Cookie を 3日間だけ保持します。期限を過ぎれば自動的に削除されるため、不要に長く残らず安全性を保てる仕組みです。このように、有効期限を設定する理由は「便利に」「安全に」使うためだと理解しておくとよいでしょう。

3. Cookieの有効期限を設定する方法(expiresの使い方)

3. Cookieの有効期限を設定する方法(expiresの使い方)
3. Cookieの有効期限を設定する方法(expiresの使い方)

Cookie の有効期限を設定する最も基本的な方法が expires です。これは、Cookie が「いつ消えるのか」を、特定の日時で指定する仕組みです。初心者の方でも理解しやすいように、まずは動きのイメージから押さえておきましょう。

expires は、PHP の setcookie() 関数の第3引数に「Unix タイムスタンプ」という数値を渡して設定します。Unix タイムスタンプとは、1970年1月1日からの経過秒数を表すもので、日時を数値として扱うために便利な形式です。


setcookie("username", "Taro", time() + 86400, "/");

上のコードは、「username」という Cookie を 1日後(86400秒後)まで残す例です。time() + 86400 と書くことで、「現在の時刻に24時間を足した日時」を期限に設定しています。

また、「◯月◯日まで有効」といった形で日時を直接指定したい場合は、strtotime() を使うと、とても直感的に書けます。


setcookie("session_id", "abc123", strtotime("+7 days"), "/");

この例では、「session_id」という Cookie を「7日後の日時」まで保持します。strtotime("+7 days") は「7日後の日付を自動計算してくれる関数」で、初心者の方でも扱いやすいのでよく使われます。

このように、expires を使うと「Cookie をいつまで保存するか」を分かりやすくコントロールできます。まずは日数を足してみる方法から慣れていくと、PHP の Cookie 操作がより理解しやすくなります。

4. Cookieの有効期限を設定する方法(max-ageの使い方)

4. Cookieの有効期限を設定する方法(max-ageの使い方)
4. Cookieの有効期限を設定する方法(max-ageの使い方)

max-age は、Cookie の有効期限を「今から何秒後まで残すか」という形で指定する方法です。時間を直接秒で指定するため、設定内容が分かりやすく、短い期限を決めたい場合にも使いやすい特徴があります。初心者の方でも直感的に理解しやすい仕組みです。

PHP の setcookie() では expires を利用する書き方が一般的ですが、連想配列でオプションを渡すと同時に、max-age を含んだ Cookie をブラウザに送ることができます。


setcookie("user_option", "on", [
    "expires" => time() + 3600, // 1時間後
    "path" => "/",
    "secure" => true,
    "httponly" => true,
    "samesite" => "Strict"
]);

この例では「user_option」という Cookie を 1時間だけ保持します。expires を使っていますが、ブラウザ側では max-age として扱われるケースもあり、結果として「一定時間だけ Cookie を残す」という目的を達成できます。

また、より明確に秒数で指定したい場合は、HTTP ヘッダーを直接送る方法もあります。こちらは秒数がそのまま Cookie の寿命になるため、「とにかく秒単位で指定したい」という場面で役に立ちます。


header("Set-Cookie: sample_cookie=test; Max-Age=300; Path=/; Secure; HttpOnly");

このサンプルでは、「sample_cookie」を 300秒(5分)だけ保持するようブラウザに指示します。短い期間テストしたい場合や、お試し機能を実装するときなどに便利です。まずは短めの秒数で動きを確認して、Cookie のしくみを一歩ずつ理解すると操作に慣れやすくなります。

5. expires と max-age の違い

5. expires と max-age の違い
5. expires と max-age の違い

expiresmax-age は、どちらも Cookie の有効期限を設定するための方法ですが、それぞれ以下の違いがあります。

設定方法 指定する値 対応ブラウザ
expires 特定の日時(例: 2025年12月31日 23:59:59) すべてのブラウザでサポート
max-age 現在時刻からの秒数(例: 3600 秒) HTTP/1.1 以降でサポート(古いブラウザでは未対応)

一般的には、expires を使用する方が広くサポートされていますが、HTTP ヘッダーを操作する場合は max-age を使うこともあります。

6. Cookieの有効期限を変更・削除する方法

6. Cookieの有効期限を変更・削除する方法
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の有効期限を設定する際の注意点

7. Cookieの有効期限を設定する際の注意点
7. Cookieの有効期限を設定する際の注意点

Cookie の有効期限を設定する際には、以下の点に注意が必要です。

7.1 ユーザーのプライバシーに配慮する

Cookie には個人情報を保存しないようにしましょう。特に、パスワードやクレジットカード情報を直接保存するのは危険です。

7.2 短すぎる有効期限はユーザーの不便につながる

有効期限が短すぎると、ユーザーがログインするたびに情報がリセットされるため、不便に感じることがあります。用途に応じて適切な期間を設定しましょう。

7.3 長すぎる有効期限はセキュリティリスクになる

逆に、有効期限が長すぎると、不正に Cookie を利用されるリスクが高まります。ログイン情報などの重要な Cookie には適切な期限を設定しましょう。

8. Cookieの有効期限を活用した実践的な例(ログイン情報の保存など)

8. 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 をより安全に扱うために、securehttponly を設定することを推奨します。


setcookie("auth_token", "xyz456", [
    "expires" => time() + 86400,
    "path" => "/",
    "secure" => true,
    "httponly" => true,
    "samesite" => "Strict"
]);

この設定を行うことで、Cookie は HTTPS 通信時のみ送信され、JavaScript からのアクセスも禁止されます。

まとめ

まとめ
まとめ

PHP の Cookie の有効期限を設定する仕組みは、初心者が最初につまずきやすい箇所ではありますが、仕組みそのものはとてもシンプルで実用的な考え方に基づいています。特に、expires と max-age を使い分けながら、ユーザーの利便性やセキュリティを両立するという視点は、実際の Web アプリケーション開発において欠かせない考え方です。Cookie はユーザーの体験に直接関わる要素であり、正しく設定することで「再ログインの手間が省ける」「安全にデータを扱える」といった大きなメリットを生み出します。

expires を使う場合は「特定の日時」まで Cookie を保持でき、max-age を使う場合は「今から何秒後」まで保存するかを明確に指定できます。実際の現場では、ブラウザ対応の幅広さから expires が多く使われますが、HTTP ヘッダーを直接制御するシーンでは max-age のほうが自然な場面もあります。また、ログイン情報やテーマ設定のように、ユーザーが次回のアクセスでも同じ状態を維持してほしいケースでは、適切な有効期限設定がユーザー体験を大きく左右します。

その一方で、有効期限を短くしすぎるとログイン情報がすぐ失われてしまいユーザーに不満が生まれる可能性もありますし、逆に長すぎる有効期限はセキュリティリスクが高くなります。この記事で学んだ内容を踏まえて、用途に応じてバランスよく Cookie の期限を設定できるようになっておくと安心です。特に、secure・httponly・samesite といった属性を組み合わせることで、Cookie 周りの安全性をさらに高められるため、実務においては期限設定と併せて必ず意識したいポイントです。

最後に、実践的な例として紹介した「自動ログイン」の仕組みは、Cookie の有効期限設定が日常的に触れる場面のひとつです。次回訪問時にスムーズにログインできる仕組みは、ユーザーにとって大きなメリットでありながら、開発者に求められる責任も大きい部分です。正しい期限設定と安全なオプションの組み合わせによって、便利さと安全性を両立した Cookie 設計が実現できます。

サンプルコード(期限付きログイン Cookie の実装例)


if (isset($_POST["email"]) && isset($_POST["remember"])) {
    setcookie("login_user", $_POST["email"], [
        "expires" => time() + (14 * 86400),
        "path" => "/",
        "secure" => true,
        "httponly" => true,
        "samesite" => "Lax"
    ]);
}

このコードは、ログイン時に「ログイン状態を保持する」にチェックをつけた場合、二週間ユーザーのメールアドレスを Cookie に保存する例です。secure と httponly の設定により、安全性を確保しながらログイン体験を向上させる実用的な書き方になっています。

先生と生徒の振り返り会話

生徒

「Cookie の有効期限って、単に保存期間を決めるだけだと思っていましたけど、ユーザーの便利さと安全性の両方に関わるんですね。」

先生

「その通りだよ。特にログイン情報みたいな重要なデータに使うときは、期限設定がとても大切なんだ。期限が長すぎると不正アクセスのリスクも上がるからね。」

生徒

「expires と max-age の違いもよく分かりました。状況によって使い分ければいいんですね。」

先生

「その理解で合っているよ。ブラウザの互換性を重視するなら expires、安全な API 設計のときは max-age を使うなど、開発目的に応じて選べるようにしておくと実務でもスムーズだね。」

生徒

「secure や httponly を合わせて設定することで、安全性も高められるというのは大事なポイントですね。これからは意識して書いてみます!」

先生

「素晴らしいね。Cookie はシンプルだけれど Web 開発では欠かせない仕組みだから、今日学んだことをしっかり活かしていこう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHP の Cookie の有効期限とは何を意味するのですか?セッション Cookie と持続的 Cookie の違いも知りたいです。

PHP の Cookie の有効期限とは、ブラウザに保存される期間のことです。セッション Cookie はブラウザを閉じると削除され、持続的 Cookie は expires や max-age を使って指定期間保持されます。

PHP で Cookie の有効期限を設定するには setcookie 関数をどう使えばいいのですか?

setcookie の第3引数に Unix タイムスタンプを指定すると expires を設定できます。time に秒数を足すことで有効期限を簡単に設定できます。

expires と max-age の違いを初心者向けに分かりやすく教えてください。

expires は特定の日時を指定し、max-age は現在時刻からの秒数を指定します。expires はすべてのブラウザで使われますが、max-age は古いブラウザで未対応の場合があります。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
PHP のクッキー管理の記事一覧へ
新着記事
New1
Claude
ClaudeにPHPデバッグを相談するコツ!原因候補を仮説に分けて確認する質問例
New2
Python
PythonのCLIで対話型メニューを作る方法(prompt_toolkit)
New3
ChatGPT
ChatGPTでPHPコードを理解する方法!読めない処理をわかりやすく質問しよう
New4
PHP
PHP の定数(define, const)を使った設定方法を徹底解説!
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.3
Java&Spring記事人気No3
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.4
Java&Spring記事人気No4
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.5
Java&Spring記事人気No5
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作
No.6
Java&Spring記事人気No6
Claude
ClaudeにPHPリファクタリングを相談するコツ!目的・前提・制約を仕様メモにまとめるコツ
No.7
Java&Spring記事人気No7
Python
Pythonのシェルスクリプトを自動実行する方法(cron & Task Scheduler)
No.8
Java&Spring記事人気No8
PHP
PHPのMVCパターンを完全解説!初心者でもわかるModel・View・Controller