PHP 8.5.0 Alpha 1 available for testing

setrawcookie

(PHP 5, PHP 7, PHP 8)

setrawcookieEnvía un cookie sin codificar su valor en URL

Descripción

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

Firma alternativa disponible a partir de PHP 7.3.0 (no soportado con argumentos nombrados):

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

setrawcookie() es idéntica a setcookie() excepto que el valor del cookie no será automáticamente codificado en URL al enviarlo al navegador.

Parámetros

Para más información, consúltese la documentación de la función setcookie().

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

Versión Descripción
7.3.0 Se ha añadido una firma alternativa que soporta un array de options. Esta firma permite definir el atributo SameSite del cookie.

Ver también

add a note

User Contributed Notes 2 notes

up
26
Brian
19 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
12
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