Sunteți pe pagina 1din 22

Cookies

e Sesses

Cookies e Sesses
HTTP um protocolo que no mantm estado (no tem
memria);

Cada pedido que o browser faz ao servidor independente; Algumas aplicaes precisam manter o estado das variveis
entre as pginas;

Carrinho de compras; Cadastro com vrios passos; Questionrios com vrias pginas...
Prof. Claunir Pavan

Para manter o estado...


Podemos guardar informaes no browser do cliente usando
cookies, ou;

Guardar informaes de estado no servidor usando sesses;

Prof. Claunir Pavan

Cookies
http://www.php.net/manual/pt_BR/function.setcookie.php

So variveis enviadas pelo servidor para o browser atravs do


protocolo HTTP;

Arquivo de texto armazenado no computador do visitante que


contm informaes para uma utilizao futura;

Quando o browser vericar que existem cookies para o site eles


so enviados juntamente com o pedido da pgina;
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

Prof. Claunir Pavan

Um cookie pode ter parmetros para: expirar em uma data/hora determinada; restringir o seu envio um determinado domnio... Podem ser usados para: Manter preferncias de usurio entre visitas; Armazenar detalhes de login... Browsers podem guardar 20 cookies de cada domnio; No podem ter mais de 4KB; Usurios podem desabilitar cookies no browser; Cookies podem ser lidos somente a partir do domnio que os
gerou (por questes de segurana);
Prof. Claunir Pavan

Cookies em PHP
A funo setcookie do PHP gera o cabealho HTTP_COOKIE; Os cookies cam disponveis atravs do array $_COOKIE; Exemplos:

Prof. Claunir Pavan

index.php
<?php //Define um cookie chamado count, que expira depois de 1 hora (3600 segundos) if(!isset($_COOKIE["count"])){ $count = 0; setcookie("count", $count, time()+3600); } // define o timezone padro. date_default_timezone_set('America/Sao_Paulo');

Formato alternativo

$umAno = time() + 60 * 60 * 24 * 365; // $umAno = time() + (strtotime(+1 year)-strtotime(now)); setcookie("visit", date("d/m/Y - G:i:s") , $umAno); ?> <!-- Continua no prximo slide -->

Prof. Claunir Pavan

index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Exemplo do uso de cookies</title> </head> <body> <?php print_r($_COOKIE); ?> <!-- //somente para verificao do estado da varivel --> <h1>O cookie foi criado com o valor: <?php echo isset($_COOKIE["count"]) ? $_COOKIE["count"] : '' ; ?></h1> <h3><a href="incCookie.php">Clique aqui para incrementar</a></h3> <h3><a href="apagaCookie.php">Clique aqui para apagar</a></h3> <?php if(isset($_COOKIE["visit"])){ echo "<h2>Seu ltimo acesso foi em: " . $_COOKIE["visit"] . "</h2>"; } ?> </body> </html>
Prof. Claunir Pavan

incCookie.php

<?php // verifica se o cookie est definido e incrementa o valor e grava o cookie novamente if(isset($_COOKIE["count"])){ $count = $_COOKIE["count"]; $count++; setcookie("count", $count, time()+3600); } header("Location:index.php"); ?>

Prof. Claunir Pavan

apagaCookie.php

<?php // verifica se o cookie est definido e o elimina if(isset($_COOKIE["count"])) { setcookie("count", false); } if(isset($_COOKIE["count"])) { setcookie("visit", false); } header("Location:index.php"); ?>

Prof. Claunir Pavan

Sesses
Uma sesso um perodo de tempo em que o usurio visita um
conjunto de pginas;

Variveis de sesso armazenam informaes sobre um usurio


nico, e cam disponveis em todas as pginas da aplicao at o usurio sair da aplicao; permanentemente, deve-se utilizar uma base de dados;

As informaes das sesses so temporrias. Para mantlas

Prof. Claunir Pavan

Sesses - funcionamento
Um identicador nico de usurio (UID), id da sesso, criado
para cada visitante :

26fe536a534d3c7cde4297abb45e275a As variveis de sesso so armazenadas com base em cada UID; O id da sesso armazenado num cookie, ou propagado via
URL entre pginas enquando o usurio navega;

Os dados a serem armazenados (ex. nome, data, etc...) so

armazenados de forma segura no servidor, em uma varivel PHP global superglobal;


Prof. Claunir Pavan

Inicializar uma sesso


Antes de armazenar informaes numa sesso PHP, preciso
inicializar uma sesso atravs da funo session_start();

Esta funo deve aparecer ANTES da tag <html>; O PHP faz todo o trabalho: procura por uma sesso vlida (id)
nas superglobals $_COOKIE e $_GET; sesso criada;

Se encontrar, inicializa os dados. Caso contrrio, uma nova


<?php session_start(); ?> <html> <body> </body> </html>

Prof. Claunir Pavan

Armazenar dados em uma sesso


A varivel $_SESSION um array associativo que pode ser usada
para armazenar dados da sesso; Exemplo:

$_SESSION[nome] = $nome; $_SESSION[idade] = $idade;

Prof. Claunir Pavan

Ler dados de uma sesso


Podemos recuperar informaes guardadas na varivel de
sesso $_SESSION; Exemplo:

$nome = $_SESSION[nome]; $idade = $_SESSION[idade];

Prof. Claunir Pavan

Propagao por cookie


Um cookie armazenado no cliente contendo a id da sesso; Este cookie lido sempre que a funo session_start()
chamada; (caso o cookie no exista, criado)

O cookie expira quando o navegador fechado. Propriedades do cookie podem ser denidas com
session_set_cookie_params;

Prof. Claunir Pavan

Propagao por URL


A id da sesso pode ser propagada pela URL:
(caminho/index.php?phpsid=26fe536a534d3c7cde4297abb45e275a)

O mdulo de sesso do PHP possui uma constante (global), SID,


para anexar a id de uma sesso em qualquer link interno:

Exemplo:

echo "<a href=\"p2.php?" . htmlspecialchars(SID) . "\">Prxima</a>";

Prof. Claunir Pavan

Qual propagao devemos usar?


O padro do servidor PHP usar os dois mtodos! Se os cookies estiverem habilitados, usa propagao por cookies; Caso contrrio, propagao por URL;

Prof. Claunir Pavan

Exemplos
ex1.php
<?php session_start(); if(isset($_SESSION['views'])) $_SESSION['views']=$_SESSION['views']+1; else $_SESSION['views']=1; echo "Views=". $_SESSION['views']; ?>

Prof. Claunir Pavan

Exemplos
<?php session_start();

pagina1.php

echo "Pgina 1"; $_SESSION["nome"] = "Fulano"; $_SESSION["sobrenome"] = "de tal"; $_SESSION["data"] = time(); //este link s funciona se os cookies forem aceitos echo "<br /><a href=\"pagina2.php\">Pgina 2 </a>"; //este link funciona mesmo sem cookies echo "<br /><a href=\"pagina2.php?" . htmlspecialchars(SID) . "\">Pgina 2 </a>"; ?>
Prof. Claunir Pavan

Exemplos
pagina2.php
<?php session_start(); echo "Pgina 2"; echo "<br />" . $_SESSION["nome"] . " " . $_SESSION["sobrenome"]; echo "<br />" . date("d/m/Y - G:i:s", $_SESSION["data"]); ?>

Prof. Claunir Pavan

Fechar uma sesso


Para eliminar dados de uma sesso, posemos usar a funo
unset() ou session_destroy();

Unset usada para eliminar uma varivel da sesso: unset($_SESSION['views']); session_destroy elimina a sesso toda: session_destroy();

Prof. Claunir Pavan

S-ar putea să vă placă și