Cookies PHP

Resumo : neste tutorial, você aprenderá sobre cookies e como usar a setcookie()função PHP para gerenciar cookies de forma eficaz.

Introdução aos cookies

A web funciona com base no protocolo HTTP. O protocolo HTTP não tem estado.

Quando o navegador da web solicita uma página de um servidor da web, o servidor da web responde com o conteúdo da página. Mais tarde, o mesmo navegador solicita a mesma página novamente e o servidor não tem informações de que a solicitação é do mesmo navegador.

Os cookies resolvem este desafio apátrida.

Um cookie é um dado que um servidor da web envia para o navegador da web. O navegador da web pode armazená-lo e enviá-lo de volta nas solicitações subsequentes ao mesmo servidor da web. O servidor web sabe que duas solicitações vêm do mesmo navegador usando o mesmo cookie.

Os cookies também são conhecidos como cookies da web, cookies HTTP ou cookies do navegador. Usaremos os cookies para resumir.

O fluxograma a seguir ilustra como funcionam os cookies:

Biscoito PHP

Como funciona.

  • Primeiro, o navegador envia uma solicitação ao servidor web. O servidor web não possui nenhuma informação sobre o navegador web. O servidor web cria um cookie com um nome retornado e um valor 1 e anexa o cookie ao cabeçalho de resposta HTTP. Para criar um cookie, você usará a setcookie()função.
  • Em segundo lugar, o navegador armazena o cookie.
  • Terceiro, o navegador envia a segunda solicitação com o cookie armazenado no cabeçalho da solicitação HTTP para o servidor web. No servidor web, o PHP pode acessar o cookie através da $_COOKIEvariável superglobal e fazer algo de acordo.
  • Finalmente, o servidor web responde com o conteúdo da solicitação. Normalmente, ele responde ao navegador com o conteúdo baseado no valor do cookie.

Um navegador da web pode armazenar um cookie com tamanho máximo de 4 KB. No entanto, é diferente entre navegadores da web.

Um cookie tem uma data de validade. Normalmente, os navegadores da web armazenam cookies por um período específico. E o servidor web pode especificar o tempo de expiração de um cookie.

Um cookie também armazena o endereço web (URL) que indica o URL que criou o cookie. E o navegador da web pode enviar de volta o cookie que foi originalmente definido pelo mesmo endereço da web. Em outras palavras, um site não conseguirá ler um cookie definido por outros sites.

A maioria dos navegadores modernos permite que os usuários optem por aceitar cookies. Portanto, você não deve confiar totalmente em cookies para armazenar dados críticos.

Por que usar cookies

Em geral, os websites utilizam cookies para melhorar a experiência do utilizador. Por exemplo, você teria que fazer login em um site novamente depois de deixá-lo sem cookies.

Normalmente, você usará cookies para as seguintes finalidades:

  • Gerenciamento de sessões : os cookies permitem que um site lembre os usuários e suas informações de login ou qualquer outra coisa que o servidor web deva lembrar.
  • Personalização: os cookies podem armazenar preferências, temas e outras configurações do usuário.
  • Rastreamento: os cookies armazenam o comportamento do usuário. Por exemplo, em um site do Ecommerce, você pode usar cookies para registrar os produtos que os usuários visualizaram anteriormente. Posteriormente, você poderá usar essas informações para recomendar produtos relacionados nos quais os usuários possam estar interessados.

Configurando um cookie em PHP

O PHP facilita o trabalho com cookies usando a setcookie()função. A setcookie()função permite enviar um cabeçalho HTTP para criar um cookie no navegador da web.

<?php

setcookie ( 
    string $name , 
    string $value = "" , 
    int $expires = 0 , 
    string $path = "" , 
    string $domain = "" , 
    bool $secure = false , 
    bool $httponly = false 
): boolLinguagem de código:  HTML, XML  ( xml )

A tabela a seguir ilustra os argumentos da setcookie()função:

Argumento Significado
$nome O nome do biscoito
$valor O valor do biscoito. Pode ser qualquer valor escalar, como string ou número inteiro.
$ expira A hora (em um carimbo de data/hora UNIX) em que o cookie expira. Se $expiresnão estiver definido ou definido como 0, o cookie expirará quando o navegador da web for fechado.
$caminho O caminho no servidor web no qual o cookie estará disponível. Por exemplo, se o caminho for ‘/’, o cookie estará disponível dentro do domínio.
$domínio O domínio para o qual o cookie estará disponível.
$ seguro se $secure estiver definido como true, o cookie deverá ser transmitido por uma conexão HTTP segura (HTTPS) do navegador da web.
$httpsomente se $httponlyfor verdade, o cookie só poderá ser acessado através do protocolo HTTP, não do JavaScript.

A partir do PHP 7.3.0, você pode usar a mesma setcookie()função com uma assinatura alternativa:

setcookie ( 
    string $name , 
    string $value = "" , 
    array $options = [] ) : boolLinguagem de código:  PHP  ( php )

O argumento é uma matriz que possui uma ou $optionsmais chaves, como expires, path, domain, securee . O pode assumir um valor de , ou . Se você usar qualquer outra tecla, a função irá gerar um aviso.httponlysamesitesamesiteNoneLaxStrictsetcookie()

A setcookie()função retorna truese for executada com sucesso. Observe que não indica se o navegador aceita o cookie ou não. A setcookie()função retorna falsese falhar.

$_COOKIE

A $_COOKIEmatriz associativa que armazena os cookies HTTP. Para acessar um cookie por um nome, você usa a seguinte sintaxe:

$_COOKIE['cookie_name']Linguagem de código:  PHP  ( php )

Se o nome do cookie contiver pontos ( .) e espaços ( ' '), será necessário substituí-los por sublinhados ( _).

Para verificar se um cookie está definido, você usa a isset()função:

<?php

if(isset($_COOKIE['cookie_name'])) {
}Linguagem de código:  HTML, XML  ( xml )

A $_COOKIEé uma variável superglobal, portanto pode ser acessada de qualquer lugar no script.

Lendo um biscoito

Antes de ler o valor de um cookie, você deve sempre verificar se ele foi definido usando a isset()função:

<?php

if (isset($_COOKIE['cookie_name'])) {
	// process the cookie value
}Linguagem de código:  HTML, XML  ( xml )

Para verificar se um cookie é igual a um valor, use o seguinte código:

<?php

if (isset($_COOKIE['cookie_name']) && $_COOKIE['cookie_name'] == 'value') {
	// ...
}Linguagem de código:  HTML, XML  ( xml )

Excluindo um cookie

Se você não usar um cookie, poderá forçar o navegador a excluí-lo. O PHP não fornece uma função que exclua diretamente um cookie. No entanto, você pode excluir um cookie usando a setcookie()função definindo a data de expiração para o passado.

O código a seguir exclui um cookie na cookie_namesolicitação da página subsequente:

unset($_COOKIE['cookie_name']);
setcookie('cookie_name', null, time()-3600); Linguagem de código:  PHP  ( php )

Exemplo de cookie PHP

O exemplo a seguir mostra como usar um cookie para exibir uma mensagem de saudação a um visitante novo ou recorrente.

<?php

define('ONE_WEEK', 7 * 86400);

$returning_visitor = false;

if (!isset($_COOKIE['return'])) {
	setcookie('return', '1', time() + ONE_WEEK);
} else {
	$returning_visitor = true;
}

echo $returning_visitor ? 'Welcome back!' : 'Welcome to my website!';
Linguagem de código:  HTML, XML  ( xml )

Como funciona.

Primeiro, defina uma constante que armazene uma semana em segundo:

define('ONE_WEEK', 7 * 86400);
Linguagem de código:  JavaScript  ( javascript )

Segundo, defina return_visitor como false:

$returning_visitor = false;Linguagem de código:  PHP  ( php )

Terceiro, verifique o cookie com o nome return. Se o cookie não estiver definido, crie-o com o valor um e a data de validade uma semana. Caso contrário, defina a variável $returning_visitor como verdadeira.

if (!isset($_COOKIE['return'])) {
	setcookie('return', '1', time() + ONE_WEEK);
} else {
	$returning_visitor = true;
}Linguagem de código:  PHP  ( php )

Por fim, exiba a mensagem de saudação com base no valor da $returning_visitorvariável.

Ao solicitar a página pela primeira vez, você verá a seguinte mensagem:

Welcome to my website!

E se você abrir a ferramenta de desenvolvedor web, verá o cookie conforme mostrado na imagem a seguir:

Como o navegador já armazena o cookie com o nome returne o valor 1, se você atualizar a página, verá uma mensagem diferente:

Welcome back!

Este cookie terá a duração de sete dias definida pelo servidor web. Obviamente, no navegador da web, você pode excluir manualmente o cookie.

Resumo

  • Um cookie é um dado que o servidor da web envia para um navegador da web para verificar se duas solicitações vêm do mesmo navegador.
  • Use a função PHP setcookie()para definir um cookie que é enviado junto com o cabeçalho HTTP do servidor web para o navegador web.
  • Use a variável superglobal $_COOKIEpara acessar os cookies em PHP.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *