Cookies
Cookies são gerenciados com um pote de cookies que usa um formato prefixado para isolar os cookies por contexto que compartilhem atributos em comum. Além dos parâmetros usuais, o atributo Partitioned também é suportado.
Criando potes de biscoitos
Para definir um ou mais cookies por jarro, você deve definir uma propriedade e um valor.
use Inphinit\Experimental\Http\CookieJar;
$jar1 = new CookieJar('jar1');
$jar1->example = 1;
$jar1->send();
$jar2 = new CookieJar('jar2');
$jar2->example = 2;
$jar2->send();
Ao usar o método send, cabeçalhos como este serão enviados na resposta:
Set-Cookie: jar1:example=1; Path=/; Expires=Sun, 04 Jan 2026 19:42:30 GMT
Set-Cookie: jar2:example=2; Path=/; Expires=Sun, 04 Jan 2026 19:42:30 GMT
Um exemplo básico para definir 3 cookies em um mesmo jarro:
use Inphinit\Experimental\Http\CookieJar;
$jar = new CookieJar('sample');
// Define os valores para cada cookie usando o método mágico `__get()` (os valores são convertidos em strings).
$jar->foo = 1;
$jar->bar = 2.5;
$jar->baz = 'text';
$jar->setExpires('+1 week');
$jar->setHttpOnly(true);
$jar->setPartitioned(true);
$jar->send();
Ao usar o método send, cabeçalhos como este serão enviados na resposta:
Set-Cookie: sample:foo=1; Path=/; HttpOnly; Partitioned; Secure; Expires=Sun, 04 Jan 2026 19:42:30 GMT
Set-Cookie: sample:bar=2.5; Path=/; HttpOnly; Partitioned; Secure; Expires=Sun, 04 Jan 2026 19:42:30 GMT
Set-Cookie: sample:baz=text; Path=/; HttpOnly; Partitioned; Secure; Expires=Sun, 04 Jan 2026 19:42:30 GMT
Obtendo valores dos cookies:
O método send() só é necessário no momento de definir ou atualizar um cookie, para obter o valor em requisições posteriores basta instanciar e usar as propriedades mágicas:
use Inphinit\Experimental\Http\CookieJar;
$jar1 = new CookieJar('jar1');
var_dump($jar1->example);
$jar2 = new CookieJar('jar2');
var_dump($jar2->example);
Deletando cookies:
No exemplo a seguir os cookies foo (no jarro estará como sample:foo) e bar (no jarro estará como sample:bar) serão removidos, enquanto foo será criado ou terá o valor atualizado para 3:
use Inphinit\Experimental\Http\CookieJar;
$jar = new CookieJar('sample');
$jar->foo = null;
$jar->bar = null;
$jar->baz = '3';
$jar->send();
Ao usar o método send(), cabeçalhos como este serão enviados na resposta:
Set-Cookie: sample:foo=_; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Max-Age=0
Set-Cookie: sample:bar=_; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Max-Age=0
Set-Cookie: sample:baz=3; Path=/; Expires=Sun, 04 Jan 2026 19:45:48 GMT
API
| Uso | Descrição |
|---|---|
setDomain($domain) |
Define o host para o qual o cookie será enviado. Observação: ao contrário das especificações anteriores, os pontos iniciais nos nomes de domínio (.example.com) são ignorados.
|
setExpires(string $datetime) |
Indica a duração máxima dos cookies. Nota: Aceita descrições de data e hora em inglês (por exemplo, '+1 day', 'last Monday').
|
setHttpOnly(bool $enable) |
Impede que o JavaScript acesse o cookie, por exemplo, através da propriedade document.cookie.
|
setPartitioned(bool $enable) |
Indica que o cookie deve ser armazenado usando armazenamento particionado.
Observe que, se esta opção estiver definida, a diretiva Secure também será ativada automaticamente quando send() for executado.
|
setPath(string $path) |
Indica o caminho que deve existir no URL solicitado para que o navegador envie o cabeçalho Cookie. |
setSameSite(int $mode) |
Controla se um cookie é enviado ou não com solicitações entre sites diferentes. |
setSecure(bool $enable) |
Indica que o cookie é enviado ao servidor apenas quando uma solicitação é feita com o esquema https (exceto em localhost) e, portanto, é mais resistente a ataques do tipo man-in-the-middle. |
Constantes
As seguintes constantes devem ser usadas com o método setSameSite():
| Uso | Descrição |
|---|---|
SAME_LAX |
Enviar cookies apenas para solicitações originadas do mesmo site que definiu o cookie e para
solicitações entre sites que atendam aos dois critérios a seguir.
|
SAME_NONE |
Envie o cookie tanto para solicitações "entre sites" quanto para solicitações "no mesmo site". |
SAME_STRICT |
Enviar cookies somente para solicitações originadas do mesmo site que definiu o cookie. |
Examplo:
use Inphinit\Experimental\Http\CookieJar;
$jar = new CookieJar('sample');
...
$jar->setSameSite(CookieJar::SAME_STRICT);
$jar->send();