カテゴリ: PHP 更新日: 2025/05/29

PHP の cookie を設定・取得・削除する方法(setcookie, $_COOKIE)

PHP の cookie を設定・取得・削除する方法(setcookie, $_COOKIE)
PHP の cookie を設定・取得・削除する方法(setcookie, $_COOKIE)

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

新人

「PHPで Cookie ってよく聞きますけど、一体何なんですか?」

先輩

「Cookie は、Webサイトがユーザーのブラウザに保存する小さなデータのことだよ。例えば、ログイン情報や設定を記憶するのに使われるんだ。」

新人

「なるほど!じゃあ、どうやって設定するんですか?」

先輩

「それじゃあ、まずは Cookie の基本から説明していくよ!」

-

1. Cookieとは何か?(基本的な説明)

1. Cookieとは何か?(基本的な説明)
1. Cookieとは何か?(基本的な説明)

Cookie(クッキー)は、Webサーバーがユーザーのブラウザに保存する小さなデータのことです。これにより、ユーザーの情報を一時的または長期間保存することができます。

例えば、ショッピングサイトでカートの中身を保持したり、ログイン情報を記憶したりするのに利用されます。

Cookie を利用することで、以下のようなことが可能になります:

  • ログイン状態を維持する
  • ユーザーの設定(言語、デザインなど)を保存する
  • 訪問履歴を記録してパーソナライズする

では、具体的に Cookie がどのように機能するのかを見てみましょう。

2. Cookieの仕組み(ブラウザとサーバーの関係)

2. Cookieの仕組み(ブラウザとサーバーの関係)
2. Cookieの仕組み(ブラウザとサーバーの関係)

Cookie は、サーバーとブラウザの間でやり取りされる仕組みです。基本的な流れは以下のようになります:

  1. サーバーが Cookie を設定し、ユーザーのブラウザに保存される。
  2. ユーザーが同じサイトにアクセスすると、ブラウザが保存した Cookie をサーバーに送信する。
  3. サーバーは Cookie の内容を読み取って、適切な処理を行う。

例えば、PHP では setcookie() 関数を使って Cookie を設定できます。


setcookie("user", "Taro", time() + 3600, "/");

このコードは、「user」という名前の Cookie を作成し、その値を「Taro」に設定します。また、有効期限は1時間後(3600秒後)に設定されています。

そして、ブラウザが次回アクセスすると、サーバーに以下のような情報が送られます:


Cookie: user=Taro

サーバー側では、PHP の $_COOKIE 配列を使ってこの情報を取得できます。


if (isset($_COOKIE["user"])) {
    echo "ようこそ、" . htmlspecialchars($_COOKIE["user"], ENT_QUOTES, 'UTF-8') . "さん!";
} else {
    echo "はじめまして!";
}

このコードでは、Cookie に「user」というデータが保存されていれば、その値を表示します。もし Cookie がない場合は、「はじめまして!」と表示されます。

このように、Cookie を使うことで Web アプリケーションに状態を持たせることができます。

3. Cookieの設定方法(setcookie関数の使い方)

3. Cookieの設定方法(setcookie関数の使い方)
3. Cookieの設定方法(setcookie関数の使い方)

Cookie を設定するには、PHP の setcookie() 関数を使用します。基本的な書き方は以下の通りです。


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

それぞれのパラメータの意味は以下の通りです。

  • name: Cookie の名前
  • value: Cookie に保存する値
  • expire: Cookie の有効期限(タイムスタンプ)
  • path: Cookie が適用されるパス
  • domain: Cookie を適用するドメイン
  • secure: true の場合、HTTPS のみで送信
  • httponly: true の場合、JavaScript でのアクセスを禁止

例えば、1時間後に期限が切れる Cookie を設定する場合、以下のように記述します。


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

このコードを実行すると、ブラウザに「username=Taro」という Cookie が保存され、1時間後に自動的に削除されます。

4. Cookieの取得方法($_COOKIEの使い方)

4. Cookieの取得方法($_COOKIEの使い方)
4. Cookieの取得方法($_COOKIEの使い方)

Cookie を取得するには、$_COOKIE 変数を使用します。Cookie が設定されているか確認しながら値を取得するには、以下のように記述します。


if (isset($_COOKIE["username"])) {
    echo "ようこそ、" . htmlspecialchars($_COOKIE["username"], ENT_QUOTES, 'UTF-8') . "さん!";
} else {
    echo "はじめまして!";
}

上記のコードでは、Cookie の値が設定されていれば、「ようこそ、Taro さん!」と表示されます。設定されていない場合は、「はじめまして!」と表示されます。

また、ブラウザが送信する Cookie を確認するには、以下のように var_dump() を使って $_COOKIE の内容を表示することができます。


var_dump($_COOKIE);

このコードを実行すると、現在の Cookie の一覧が表示されます。

-

5. Cookieの有効期限とオプション設定

5. Cookieの有効期限とオプション設定
5. Cookieの有効期限とオプション設定

Cookie の有効期限を設定すると、指定した時間が経過した後に自動的に削除されます。有効期限は、現在のタイムスタンプ(time())に秒単位の時間を加えて設定します。

例えば、1日(86400秒)後に期限が切れる Cookie を設定するには、以下のように記述します。


setcookie("theme", "dark", time() + 86400, "/");

また、オプションを指定してセキュアな Cookie を設定することもできます。securetrue にすると、HTTPS 接続時のみ Cookie が送信されます。httponlytrue にすると、JavaScript でのアクセスを禁止できます。


setcookie("secureToken", "abc123", time() + 3600, "/", "", true, true);

上記のコードは、HTTPS 通信時のみ Cookie を送信し、JavaScript からのアクセスを禁止するよう設定されています。

6. Cookieの削除方法(setcookieで削除する方法)

6. Cookieの削除方法(setcookieで削除する方法)
6. Cookieの削除方法(setcookieで削除する方法)

Cookie を削除するには、setcookie() を使って有効期限を過去の時間に設定します。削除する際の基本的な方法は以下の通りです。


setcookie("username", "", time() - 3600, "/");

このコードは、「username」という名前の Cookie を削除します。有効期限を time() - 3600(1時間前)に設定することで、ブラウザが Cookie を無効化します。

また、Cookie の削除時には pathdomain も同じ値で指定する必要があります。設定時と異なる値を指定すると、削除が正しく行われないことがあります。

複数の Cookie を削除する場合は、以下のように記述します。


setcookie("user_id", "", time() - 3600, "/");
setcookie("session_token", "", time() - 3600, "/");

このコードを実行すると、「user_id」 と「session_token」の Cookie が削除されます。

7. Cookieを使う際の注意点(セキュリティ・プライバシー)

7. Cookieを使う際の注意点(セキュリティ・プライバシー)
7. Cookieを使う際の注意点(セキュリティ・プライバシー)

Cookie を使用する際は、セキュリティとプライバシーを考慮する必要があります。特に、以下の点に注意してください。

7.1 セキュアな Cookie の設定

Cookie に重要な情報を保存する場合は、HTTPS 接続のみで送信されるように secure オプションを有効にしましょう。


setcookie("auth_token", "abc123", time() + 3600, "/", "", true, true);

この設定により、Cookie は HTTPS 通信時のみ送信され、JavaScript からのアクセスも禁止されます。

7.2 XSS(クロスサイトスクリプティング)対策

JavaScript による不正なアクセスを防ぐため、httponly オプションを設定しましょう。


setcookie("session_id", "xyz456", time() + 3600, "/", "", true, true);

この設定により、JavaScript で Cookie を取得できなくなります。

7.3 CSRF(クロスサイトリクエストフォージェリ)対策

CSRF 攻撃を防ぐため、Cookie に CSRF トークンを保存し、フォーム送信時に検証する方法があります。


session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
setcookie("csrf_token", $_SESSION['csrf_token'], time() + 3600, "/", "", true, true);

このコードは、セッションに CSRF トークンを作成し、Cookie に保存する処理です。

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

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

Cookie を活用すると、ログイン情報を一時的に保存し、ユーザーが次回訪問時に自動的にログインできるようにできます。

8.1 ログイン時に Cookie を保存する

ユーザーがログインした際に、ログイン情報を Cookie に保存する方法を紹介します。


if ($_POST["username"] === "user" && $_POST["password"] === "pass") {
    setcookie("logged_in_user", $_POST["username"], time() + 86400, "/");
    echo "ログイン成功!";
} else {
    echo "ログインに失敗しました。";
}

このコードは、ユーザーが正しいログイン情報を入力すると、「logged_in_user」という Cookie を保存します。

8.2 ログイン情報の自動復元

次回アクセス時にログイン情報を自動的に復元するには、以下のように $_COOKIE を使います。


if (isset($_COOKIE["logged_in_user"])) {
    echo "ようこそ、" . htmlspecialchars($_COOKIE["logged_in_user"], ENT_QUOTES, 'UTF-8') . " さん!";
} else {
    echo "ログインしてください。";
}

Cookie に保存されたユーザー名があれば、自動的にログイン状態になります。

8.3 ログアウト機能の実装

ログアウト時には、Cookie を削除することでユーザーのセッションを終了できます。


setcookie("logged_in_user", "", time() - 3600, "/");
echo "ログアウトしました。";

このコードは、ログアウトボタンを押した際に Cookie を削除し、ユーザーをログアウトさせます。

コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
Pythonの条件式でNoneを判定する方法!is None vs == None の違い
Pythonのpass文とは?一時的なコードブロックをスキップする方法
人気記事
No.1
Java&Spring記事人気No1
PHPとは?初心者向けにわかりやすく解説
No.2
Java&Spring記事人気No2
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.3
Java&Spring記事人気No3
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.4
Java&Spring記事人気No4
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
-