Cookies com Spoon avançado

Pequenos detalhes um pouco mais avançados sobre o manejo de Cookies em PHP por meio das bibliotecas Spoon.

Por Miguel Angel Alvarez - Tradução de Celeste Veiga


Publicado em: 05/10/10
Valorize este artigo:
No artigo anterior do manual das bibliotecas Spoon explicamos o geral sobre o uso de cookies por meio da biblioteca Spoon. No presente texto pretendemos dar as explicações restantes sobre o trabalho com Cookies, que nos permitem configurar o tempo de permanência da cookie no navegador do usuário, o âmbito onde terá validade, etc. Terminaremos mostrando como com estas mesmas funções de Spoon, você poderá armazenar qualquer coisa em uma cookie, inclusive um objeto.

Vamos ver, para começar, os distintos parâmetros opcionais que podemos enviar ao método set() da classe SpoonCookie, que utilizamos para armazenar a cookie.

Configurar uma cookie para permanecer durante um dado tempo:
A cookie por padrão expira em 24 horas, mas nós podemos indicar qualquer outro tempo que possamos necessitar. Para isso, enviamos ao método set(), para criar a cookie, um terceiro parâmetro, com um valor inteiro que são os segundos que deve permanecer a cookie salva no navegador do usuário.

//Indicamos el tiempo que debe permanecer esta cookie, en segundos
SpoonCookie::set('cookie31dias', 'Valor de la cookie que dura 31 días', (31*24*60*60));

Pasta onde a cookie terá validade:
Igual que com a função setcookie() de PHP, podemos indicar um quarto parâmetro opcional para dizer ao diretório onde essa cookie deve existir. Por padrão, a cookie é criada com validade para qualquer diretório.

//indicamos o diretório no qual está disponível
SpoonCookie::set('cookiedirectorio', 'Valor da cookie que só se mostra em um diretório', (31*24*60*60), "/pasta");

Subdomínio onde existirá a cookie:
No quinto parâmetro podemos indicar os subdomínios onde a cookie terá validade. Por padrão só será válida no subdomínio onde seja criada, mas podemos indicar qualquer outro subdomínio ou uma expressão para indicar todos os subdomínios.

//Que estará disponível para todos os subdomínios
SpoonCookie::set('cookiesubdominios', 'valor para todos os subdominios', 86400, '/', '.meudominio.com');


O sexto e último parâmetro é um booleano para nos certificarmos de que a cookie viajará de maneira segura por meio do protocolo HTTPS.

//que nos asseguramos viajará através de https
SpoonCookie::set('cookiehttps', 'valor para que viajará seguro', 86400, '/', '.meudominio.com', true);

Armazenar quaisquer tipos de dados na cookie com PHP

Uma das vantagens da biblioteca para o trabalho com cookies de Spoon é que podemos armazenar qualquer tipo de dado em uma cookie e não apenas cadeias de texto. Por exemplo, podemos colocar algo como uma instancia de uma classe, ou seja, um objeto. Em seguida, podemos recuperar esse objeto nessa ou em outra página, dias ou meses depois, e permanecerá tal como estava no momento que foi salva.

Isto se deve a que toda a informação armazenada nas cookies está serializada, ou seja, se converteu em uma cadeia de caracteres. Essa cadeia de caracteres tem codificada toda a informação de nossos dados, por complexos que sejam e mais adiante poderemos inverter o processo de serialização para recuperar o dado original. Todo isto é feito por Spoon de maneira transparente para nós, ou seja, sem termos que fazer nada a mais.

Vejamos uma página que cria uma cookie a partir de um objeto:

<?php
//diretorio de include para spoon
define('PATH_LIBRARY', 'C:/xampp/htdocs/');
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_LIBRARY);

//incluo spoon e a biblioteca de cookies
require_once 'spoon/spoon.php';
require_once 'spoon/cookie/cookie.php';

//defino uma classe de exemplo com PHP 5
class potencia{
   public $x;
   
   function __construct($x){
      $this->x = $x;
   }
   
   function potenciar(){
      $this->x *= $this->x;
   }
}

//Crio um objeto
$objeto = new potencia(4);

//salvo uma cookie
SpoonCookie::set('cookieobj', $objeto);
?>

No código pode-se ver a declaração de uma classe e em seguida a instanciação de um objeto. Por último esse objeto é salvo em uma cookie por meio do método set() da classe SpoonCookie.

Deve-se prestar atenção que ao criar o objeto se envia o valor 4 ao construtor, razão pela qual se armazena no atributo "x" do objeto o valor 4. Depois acessamos esse valor para ver se continua inalterado.

Agora, podemos ver o código de uma página que recebe essa cookie e em seguida trabalhar com o valor como se fosse o objeto normal que foi salvo.

//diretorio de include para spoon
define('PATH_LIBRARY', 'C:/xampp/htdocs/');
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_LIBRARY);

//incluo spoon e a biblioteca de cookies
require_once 'spoon/spoon.php';
require_once 'spoon/cookie/cookie.php';


//defino uma classe de exemplo com PHP 5
class potencia{
   public $x;
   
   function __construct($x){
      $this->x = $x;
   }
   
   function potenciar(){
      $this->x *= $this->x;
   }
}

//Vejo se a cookie existe
if(SpoonCookie::exists('cookieobj')){
   //recebo o objeto da cookie
   $obj = SpoonCookie::get('cookieobj');
   
   //mostro o valor público $x
   echo $obj->x;
   //chamo ao método somar
   $obj->potenciar();
   //mostro de novo o valor público $x que mudou
   echo "<br>" . $obj->x;
}else{
   echo "não encontrei essa minhacookie";
}

Como se pode ver, para que PHP entenda o objeto serializado que vamos recuperar da cookie, devemos ter a declaração da classe PHP que define esse objeto.

No código podemos ver como se recebe a cookie armazenada na página anterior e se salva na variável $obj. Em seguida, se opera com essa variável como se fosse o objeto original. Mostra-se o valor de $obj->x (havíamos armazenado na página anterior o valor 4) e depois se chama o método potenciar() e se mostra de novo o valor de $obj->x que mudou como consequência da execução do método potenciar().

Concluindo, vimos que utilizando estas funções das bibliotecas Spoon podemos salvar nas cookies outros tipos de dados, além de cadeias de caracteres e que todo o processo é feito de maneira transparente para nós.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato