setcookie

関数の概要

PHPのsetcookie関数は、クライアントのブラウザにCookieを送信して保存させるための関数です。これにより、ユーザーの識別情報や設定情報をブラウザ側に保持させ、次回アクセス時に利用できます。HTTPレスポンスのヘッダーとして送信されるため、使用する際は出力前に呼び出す必要があります。

パラメータの説明

  • name(文字列): Cookieの名前を指定します。
  • value(文字列): Cookieに保存する値を指定します。空文字を指定すると、削除のためのCookieが設定されます。
  • expires(整数): Cookieの有効期限をUnixタイムスタンプで指定します。デフォルトは0で、ブラウザを閉じるまで有効です。
  • path(文字列): Cookieが有効なパスを指定します。デフォルトは”/”で、サイト全体で有効になります。
  • domain(文字列): Cookieが有効なドメインを指定します。省略すると設定されません。
  • secure(論理値): trueを指定すると、HTTPS接続時のみCookieが送信されます。デフォルトはfalseです。
  • httponly(論理値): trueを指定すると、JavaScriptからのアクセスを防ぎ、HTTPプロトコル経由でのみ利用可能になります。セキュリティ向上に役立ちます。
  • samesite(文字列): “Lax”、”Strict”、”None”のいずれかを指定し、クロスサイトからのCookie送信制御が可能です。PHP7.3以降で利用可能です。

戻り値

成功するとtrue、失敗するとfalseを返します。失敗する主な原因は、すでにヘッダーが送信された後に呼び出した場合などです。

使用例

基本的な使い方

<?php
// "user"という名前で"John"という値をブラウザに保存、ブラウザ終了まで有効
setcookie("user", "John");
?>

この例では、”user”という名前のCookieに”John”という値を設定し、ブラウザを閉じるまで保持されます。

有効期限を指定する例

<?php
// 1時間(3600秒)後に有効期限切れとなるCookie
setcookie("session_id", "abc123", time() + 3600);
?>

この例では現在時刻から1時間後にCookieの有効期限が切れるため、1時間だけデータを保持したい場合に使えます。

セキュリティオプションを指定する例

<?php
// HTTPS通信のみで送信、JavaScriptからはアクセス不可
setcookie("secure_token", "xyz789", time() + 86400, "/", "", true, true);
?>

この例は、SecureおよびHttpOnlyオプションを有効にし、より安全にCookieを送信する方法です。URLパスはサイト全体の”/”でドメイン指定は行っていません。

SameSite属性を使った例(PHP7.3以降)

<?php
setcookie("login_status", "logged_in", [
    'expires' => time() + 3600,
    'path' => '/',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Lax'
]);
?>

配列形式でオプションをまとめて渡すことができ、SameSite属性も設定できます。クロスサイトリクエスト時のCookie送信制御に便利です。

関連する関数

  • setrawcookie — URLエンコードせずにCookieを送信する関数
  • $_COOKIE — 受信したCookieの値を取得するグローバル配列
  • header — Cookie以外のHTTPヘッダーを設定するための関数

まとめ

PHPのsetcookie関数は、ユーザー認証やユーザー設定の保存に欠かせない機能です。ヘッダー送信の前に呼び出す必要があり、正確な有効期限やセキュリティ設定を行うことで、安全で利便性の高いWebアプリケーションを構築できます。初心者はまず基本形から始め、徐々にセキュリティ関連のオプションも理解すると良いでしょう。