関数の概要
PHPの setcookie 関数は、ユーザーのブラウザにCookieを送信して保存するための関数です。Cookieはユーザーごとに情報を保持しておくことができ、ログイン状態の保持やサイト内の設定保存などに使われます。HTTPレスポンスのヘッダーにセットされ、ユーザーが次回以降のアクセス時に同じCookie情報をサーバーに送信します。
パラメータの説明
name(文字列): 作成するCookieの名前を指定します。value(文字列): 保存する値を指定します。通常は文字列ですが、シリアライズなどで複雑なデータも格納可能です。expires(整数): Cookieの有効期限をUnixタイムスタンプで指定します。省略または0の場合はブラウザを閉じるまで有効です。path(文字列): Cookieが有効なパスを指定します。省略時は「/」でドメイン全体に適用されます。domain(文字列): Cookieが有効なドメインを指定します。サブドメインを含めて共有可能にできます。secure(bool): trueにするとHTTPS通信時のみCookieを送信します。セキュリティ向上に役立ちます。httponly(bool): trueにするとJavaScriptからアクセスできなくなり、XSS攻撃対策になります。samesite(文字列): “Lax”、”Strict”、”None” のいずれかを指定し、クロスサイトリクエストを制御します。
戻り値
setcookie は、Cookieの送信に成功すると true を返し、ヘッダーの送信が既に行われているなど失敗した場合は false を返します。
使用例
基本的な使い方
<?php
// ユーザー名を1日間保存するCookieをセット
setcookie("username", "taro", time() + 86400);
?>
この例では「username」という名前のCookieに「taro」という値をセットし、有効期限は現在時刻から1日(86400秒)後に設定しています。
パス・ドメイン・セキュリティオプションを指定する例
<?php
setcookie(
"session_id",
"abc123xyz",
time() + 3600,
"/app/",
".example.com",
true,
true
);
?>
この例では「session_id」Cookieを1時間有効にし、/app/パス以下で使え、example.comとそのサブドメインで共有されます。また、HTTPS通信時のみ送信し、JavaScriptからはアクセスできない設定です。
Samesite 属性を利用した例 (PHP 7.3 以降)
<?php
setcookie("cart", "5 items", [
'expires' => time() + 86400 * 7,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
?>
この例では配列形式でオプションを指定し、7日間有効のCookieを作成。クロスサイトリクエスト制御に“Samesite=Lax”を利用し、セキュリティを強化しています。
関連する関数
setrawcookie— 値をURLエンコードせずにCookieを送信する関数header— HTTPヘッダーを送信する汎用関数、Cookie送信時のヘッダー操作に用いることがある$_COOKIE— 送信されたCookie情報を受け取るグローバル変数
まとめ
setcookie はPHPでCookieを送信する基本関数であり、ユーザーごとの情報をブラウザに保存し、次回アクセス時に利用できます。有効期限やパス、セキュリティ設定も細かく指定できるため、ログイン管理やユーザー設定の保存に便利です。ただし、Cookieの送信はレスポンスのヘッダー送信前に行う必要があるため注意が必要です。セキュリティ面での配慮として、secure、httponly、samesite オプションを適切に設定することをおすすめします。
