https://i.ytimg.com/vi/Rp2sd3JAuWs/maxresdefault.jpg

Neste tutorial vamos mostrar como incluir arrays em um cookie PHP. Vimos no tutorial Criar, Ler, Alterar, Verificar e Deletar Cookies no PHP como inserir strings ou números em um cookie, porém inserir arrays ou objtos em um cookie, não é tão simples assim. Veja neste tutorial uma solução relativamente simples para resolver este caso.

Definições:

Cookies são pequenos arquivos incorporados pelo servidor no computador do usuário. Servem para trocar dados entre o navegador do usuário e o servidor da página que o criou.

O cookie ficará disponível pelo tempo que o desenvolvedor do site definir. Portanto, se o cookie estiver válido, ou seja, disponível, ele poderá ser acessado em seu código mesmo que o cliente feche o navegador ou desligue o computador. No próximo acesso, os dados estarão disponíveis novamente para consulta. O cookie será automaticamente apagado quando a data determinada expirar. Leia: Criar, Ler, Alterar, Verificar e Deletar Cookies no PHP.

Atenção.: Cookies podem apresentar problemas como: o usuário apagar os cookies do navegador, ou o computador ser formatado, ou até mesmo o usuário bloquear a utilização de cookies pelo navegador.

Array, em programação, é uma estrutura de dados que armazena uma coleção de elementos de tal forma que cada um dos elementos possa ser identificado por, pelo menos, um índice ou uma chave. Leia Como declarar, atribuir e acessar elementos de um Array em PHP.

1. Como criar cookies

1.1. A função PHP utilizada para criar cookies é setcookie(). Veja abaixo sua sintaxe:

Sintaxe:

setcookie(nome, valor, expira);

onde:

  • nome: Nome do cookie necessário para acessar as informações armazenadas.
  • valor: Informações que queremos gravar no cookie.
  • expira: Tempo em que o cookie deverá ficar armazenado no computador do cliente. Este tempo é indicado sempre em segundos.

Para definir o tempo de duração do cookie, vamos utilizar a função time(), tempo atual mais o tempo de vida do cookie em segundos.

Nota1: 3.600 segundos = 1 hora | 86.400‬ = 1 dia

Nota2: Se o tempo de duração do cookie for configurado como 0, ou omitido, o cookie irá expirar ao fim da sessão (quando o navegador fechar).

Obs.: Existem ainda mais quatro parâmetros (pouco comuns) que você poderá utilizar (Documento oficial PHP).

1.2. Para recuperar o(s) valor(es) de um cookie utilizamos a variável "superglobal" $_COOKIE[]. Veja a sintaxe abaixo:

Sintaxe:

$_COOKIE['nome"]

onde:

nome: Nome do cookie que foi criado pela função setcookie().

2. Como inserir um array em um cookie

Para demonstrarmos esta solução, vamos criar um exemplo prático: queremos armazenar no navegador do cliente os produtos inseridos no carrinho de compras de um site e-commerce. Assim, mesmo que o cliente feche o navegador, estes valores ficaram armazenados em um cookie e poderão ser recuperados toda vez que o cliente entrar novamente no site:

2.1. Vamos criar inicialmente o array do carrinho de compras do cliente e visualizá-lo através da função print_r().

<?php
$carrinho = array(
    ['produto' => 'geladeira', 'marca' => 'frigidare', 'modelo' => '324L', 'preço unitário' => 2432.98, 'qde' => 1],
    ['produto' => 'televisão', 'marca' => 'telefunken', 'modelo' => 'KXT22', 'preço unitário' => 1232.00, 'qde' => 1],
    ['produto' => 'armário', 'marca' => 'brasilandida', 'modelo' => 'TAU2343', 'preço unitário' => 432.50, 'qde' => 3]
);

echo '<pre>';
print_r($carrinho);
echo '</pre>';

laughing Veja como ficou o no exemplo no phpfidle.

2.2. Para armazenarmos esta estrutura de array multidimensional dentro de um cookie, podemos utilizar a função serialize().

2.2.1. A função serialize() codifica todo array em uma string mantendo o tipo e a estrutura da variável, de forma que possa ser armazenada no cookie.

<?php
// inserindo array em um cookie
$carrinhoCookie = serialize($carrinho);
setcookie('carrinho', $carrinhoCookie, time() + (86400 * 30)); // período de 30 dias

onde:

  • A função serialize($carrinho) irá codificar o array $carrinho em uma string armazenável.
  • A função setcookie() insere a string no cookie "carrinho'.

3 - Recuperando os dados do cookie

3.1. Para recuperarmos os dados armazenados no cookie, ou seja, ler os valores adicionados no carrinho de compras do cliente, precisaremos decodificar a string armazenada. Para isto utilizaremos a função unserialize().

 //recebendo o cookie, se ele tiver sido criado
$recebido = isset($_COOKIE["carrinho"]) ? $_COOKIE["carrinho"] : ""; // verifica se o cookie existe
$carrinhoAtual = unserialize($recebido); //decodificando o cookie

onde:

  • Através do operador ternário, verificamos se o cookie existe, ou seja, se foi adicionado no navegador do usuário. Se existir, recuperamos a string codificada pela função serialize($carrinho) através da variável "superglobal" $_COOKIE[].
  • A função userialize($recebido) irá decodificar novamente a string para um array e assim obtermos os seus valores.

Nota: Para saber mais sobre operador ternário leia: Como realizar atribuição condicional a uma variável PHP (Operador Ternário)

4. Exemplo completo

4.1. Veja o código completo do nosso exemplo abaixo, onde armazenamos o array no cookie e depois recuperamos seus valores:

<?php
$carrinho = array(
    ['produto' => 'geladeira', 'marca' => 'frigidare', 'modelo' => '324L', 'preço unitário' => 2432.98, 'qde' => 1],
    ['produto' => 'televisão', 'marca' => 'telefunken', 'modelo' => 'KXT22', 'preço unitário' => 1232.00, 'qde' => 1],
    ['produto' => 'armário', 'marca' => 'brasilandida', 'modelo' => 'TAU2343', 'preço unitário' => 432.50, 'qde' => 3]
);

// inserindo array em um cookie
$carrinhoCookie = serialize($carrinho);
setcookie('carrinho', $carrinhoCookie, time() + (86400 * 30)); //criando um cookie com o meu array

//recebendo o cookie, se ele tiver sido criado
$recebido = isset($_COOKIE["carrinho"]) ? $_COOKIE["carrinho"] : ""; // verifica se o cookie existe
$carrinhoAtual = unserialize($recebido); //decodificando o cookie

echo "Os produtos do carrinho são: {$carrinhoAtual[0]['produto']}, {$carrinhoAtual[1]['produto']} 
e {$carrinhoAtual[2]['produto']} <br/><br/>";
echo "Os preço da geladeira do carrinho é R$ {$carrinhoAtual[0]['preço unitário']}<br/><br/>";
echo 'Ver abaixo todos itens do array $carrinhoAtual:';

echo '<pre>';
print_r($carrinhoAtual);
echo '</pre>';

laughing Teste o exemplo no phpfidle.

Atenção: Clique 2 vezes em RUN-F9, sendo a primeira vez para criar o cookie no seu navegador e a segunda vez para recuperar os dados armazenados.

Veja o resultado abaixo:

5 - Deletando o cookie

5.1. Para deletar um cookie do navegador basta colocar um tempo de expiração negativo ou definir o valor como vazio. Veja a sintaxe abaixo:

setcookie(nome, '', time()-3600); // tempo negativo e/ou valor vazio ('')

5.2. Para deletar o cookie do navegador, siga o exemplo abaixo:

<?php

setcookie('carrinho', '', time()-3600); // tempo negativo e/ou valor vazio

//verifica se o cookie está definido
if(!isset($_COOKIE['carrinho'])) { // verifica se o cookie existe
     echo "O cookie 'carrinho' não está definido!<br>";
} else {
     echo "O cookie 'carrinho' ainda está definido!<br>";
}

if(count($_COOKIE) > 0) { // verifica se o cookie está ativo
    echo "O cookie está ativo.";
} else {
    echo "O cookie não está ativo.";
}

laughing Teste o exemplo no phpfidle.

Atenção: Clique 2 vezes em RUN-F9, sendo a primeira vez para deletar o cookie do seu navegador e a segunda vez para informar que o cookie não está definido.

Veja o resultado abaixo:

Documentação Oficial

1. [Documentação PHP - função setcookie()] » Sobre a função setcookie() - envia um cookie".

2. [Documentação PHP - $_COOKIE] » Variável superglobal $_COOKIE.

3. [Documentação PHP - função serialize()] » Sobre a função serialize() - codifica um array em uma string".

4. [Documentação PHP - função unserialize()] » Sobre a função unserialize() - decodifica novamente uma string em array.

O anúncio abaixo ajuda manter o Portal Visual Dicas

Compartilhe:

Área do Usuário

Doações

Por favor, ajude o nosso site a se manter online :)

 Obrigado!
Angelo Luis Ferreira
angelo.alf@gmail.com

Produzido por:

Topo