PHP の cookie を設定・取得・削除する方法(setcookie, $_COOKIE)
新人
「PHPで Cookie ってよく聞きますけど、一体何なんですか?」
先輩
「Cookie は、Webサイトがユーザーのブラウザに保存する小さなデータのことだよ。例えば、ログイン情報や設定を記憶するのに使われるんだ。」
新人
「なるほど!じゃあ、どうやって設定するんですか?」
先輩
「それじゃあ、まずは Cookie の基本から説明していくよ!」
1. Cookieとは何か?(基本的な説明)
Cookie(クッキー)は、Webサーバーがユーザーのブラウザに保存する小さなデータのことです。これにより、ユーザーの情報を一時的または長期間保存することができます。
例えば、ショッピングサイトでカートの中身を保持したり、ログイン情報を記憶したりするのに利用されます。
Cookie を利用することで、以下のようなことが可能になります:
- ログイン状態を維持する
- ユーザーの設定(言語、デザインなど)を保存する
- 訪問履歴を記録してパーソナライズする
では、具体的に Cookie がどのように機能するのかを見てみましょう。
2. Cookieの仕組み(ブラウザとサーバーの関係)
Cookie は、サーバーとブラウザの間でやり取りされる仕組みです。基本的な流れは以下のようになります:
- サーバーが Cookie を設定し、ユーザーのブラウザに保存される。
- ユーザーが同じサイトにアクセスすると、ブラウザが保存した Cookie をサーバーに送信する。
- サーバーは 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関数の使い方)
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の使い方)
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の有効期限とオプション設定
Cookie の有効期限を設定すると、指定した時間が経過した後に自動的に削除されます。有効期限は、現在のタイムスタンプ(time()
)に秒単位の時間を加えて設定します。
例えば、1日(86400秒)後に期限が切れる Cookie を設定するには、以下のように記述します。
setcookie("theme", "dark", time() + 86400, "/");
また、オプションを指定してセキュアな Cookie を設定することもできます。secure
を true
にすると、HTTPS 接続時のみ Cookie が送信されます。httponly
を true
にすると、JavaScript でのアクセスを禁止できます。
setcookie("secureToken", "abc123", time() + 3600, "/", "", true, true);
上記のコードは、HTTPS 通信時のみ Cookie を送信し、JavaScript からのアクセスを禁止するよう設定されています。
6. Cookieの削除方法(setcookieで削除する方法)
Cookie を削除するには、setcookie()
を使って有効期限を過去の時間に設定します。削除する際の基本的な方法は以下の通りです。
setcookie("username", "", time() - 3600, "/");
このコードは、「username」という名前の Cookie を削除します。有効期限を time() - 3600
(1時間前)に設定することで、ブラウザが Cookie を無効化します。
また、Cookie の削除時には path
や domain
も同じ値で指定する必要があります。設定時と異なる値を指定すると、削除が正しく行われないことがあります。
複数の Cookie を削除する場合は、以下のように記述します。
setcookie("user_id", "", time() - 3600, "/");
setcookie("session_token", "", time() - 3600, "/");
このコードを実行すると、「user_id」 と「session_token」の 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を活用した実践的な例(ログイン情報の保存など)
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 を削除し、ユーザーをログアウトさせます。