setrawcookie

関数の概要

setrawcookieはPHPでHTTPレスポンスにCookieを送信するための関数です。
通常のsetcookie関数と似ていますが、値の部分をURLエンコードせずにそのまま送信できる点が特徴です。
特に、Cookieの値にエンコードされては困る特殊文字やバイナリデータを含む場合に便利です。

パラメータの説明

  • name (string) : 設定するCookieの名前を指定します。
  • value (string) : Cookieの値をそのままセットします。URLエンコードは自動的には行われません。
  • expire (int) : Cookieの有効期限をUNIXタイムスタンプで指定します。省略するとブラウザ終了時までのセッションCookieになります。
  • path (string) : Cookieが有効なパスを指定します。省略するとルートパス(/)になります。
  • domain (string) : Cookieを適用するドメインを指定します。
  • secure (bool) : trueの場合、HTTPS接続時のみCookieが送信されます。
  • httponly (bool) : trueの場合、JavaScriptからCookieへアクセスできなくなり、セキュリティが向上します。

戻り値

関数は成功すると true を返し、失敗すると false を返します。
失敗する主な原因は、HTTPヘッダー送信後に呼び出していることや、不正な名前のCookieを指定した場合などです。

使用例

1. 基本的な使い方

<?php
setrawcookie("example", "raw value with spaces & symbols!");
?>

通常のsetcookieだと値がURLエンコードされますが、setrawcookieは値をそのまま送信します。

2. 有効期限を指定する例

<?php
// 1時間後に期限切れ
setrawcookie("session_token", "abc123$%^", time() + 3600, "/");
?>

1時間後に期限切れになるCookieを、ルートパスにセットします。特別なURLエンコードが不要な値に便利です。

3. セキュリティオプションを使う例

<?php
setrawcookie(
    "secure_data",
    "data;with;special=chars",
    time() + 86400,
    "/app",
    "example.com",
    true,   // secureフラグ(HTTPSのみ送信)
    true    // httponlyフラグ(JavaScriptアクセス不可)
);
?>

HTTPS接続時のみ送信され、JavaScriptからもアクセスできない安全なCookieを設定できます。

関連する関数

  • setcookie : 値を自動でURLエンコードしてCookieをセットする標準関数
  • header : HTTPヘッダーを送信するための関数(Cookieもヘッダーの一種です)

まとめ

setrawcookieは、Cookieの値をURLエンコードせずに送りたい場合に役立つ関数です。
通常のsetcookieで不都合がある場合や、生の値を指定したい特殊なケースで使うと便利です。また、有効期限やパス、セキュリティオプションも柔軟に設定でき、実務で使いやすい関数と言えます。