International PHP Conference Berlin 2025

setrawcookie

(PHP 5, PHP 7, PHP 8)

setrawcookie値を URL エンコードせずにクッキーを送信する

説明

setrawcookie(
    string $name,
    string $value = ?,
    int $expires_or_options = 0,
    string $path = ?,
    string $domain = ?,
    bool $secure = false,
    bool $httponly = false
): bool

PHP 7.3.0 以降で使える代替のシグネチャ(名前付き引数をサポートしていません):

setrawcookie(string $name, string $value = ?, array $options = []): bool

setrawcookie() は、 ブラウザに送信される際クッキーの値が自動的に URL エンコードされないことを除き、 setcookie() と等価です。

パラメータ

パラメータについての情報は setcookie() のドキュメントを参照ください。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
7.3.0 options 配列をサポートする追加のシグネチャが追加されました。 このシグネチャは、SameSite クッキー属性の設定もサポートしています。

参考

add a note

User Contributed Notes 2 notes

up
25
Brian
18 years ago
Firefox is following the real spec and does not decode '+' to space...in fact it further encodes them to '%2B' to store the cookie. If you read a cookie using javascript and unescape it, all your spaces will be turned to '+'.
To fix this problem, use setrawcookie and rawurlencode:

<?php
setrawcookie
('cookie_name', rawurlencode($value), time()+60*60*24*365);
?>

The only change is that spaces will be encoded to '%20' instead of '+' and will now decode properly.
up
11
subs at voracity dot org
18 years ago
setrawcookie() isn't entirely 'raw'. It will check the value for invalid characters, and then disallow the cookie if there are any. These are the invalid characters to keep in mind: ',;<space>\t\r\n\013\014'.

Note that comma, space and tab are three of the invalid characters. IE, Firefox and Opera work fine with these characters, and PHP reads cookies containing them fine as well. However, if you want to use these characters in cookies that you set from php, you need to use header().
To Top