Vous êtes sur la page 1sur 19

Cookies

& session
Leonardo Sibela
Maromo
HTTP, um protocolo stateless

O protocolo HTTP é conhecido por ser um protocolo sem estado

Isso quer dizer que cada requisição é independente

Mais do que isso, nenhum dado é armazenado durante as sessões

Se em um momento um formulário foi submetido, seus dados foram apenas enviados naquela
requisição e assim que ela é resolvida, os dados são perdidos

Também devemos lembrar que os dados do usuário que realizou a requisição também é perdido,
ou seja, na próxima requisição não temos como saber quem realizou a requisição anterior
Cloud Firestore
O que ou Realtime Database
não é staless?
Porque armazenar dados entre as
requisições?

Preferências como idioma, quantos resultados de pesquisa o usuário deseja que sejam exibidos
por página, safesearch, localização etc…

Publicidade: Usamos cookies para tornar a publicidade mais envolvente para os usuários e mais
valiosa para editores e anunciantes.

Existem várias coisas que podem ser armazenadas utilizando cookies. A regra é que se um dado
é sigiloso, ele não deve ser armazenado em um cookie, tanto por ficar visível para o usuário
quanto pelo fato de poder ser alterado pelo mesmo.
setar um cookie

Para setar um cookie, usamos a função setcookie que irá receber como parâmetros

● A chave que queremos atribuir ao dado que desejamos armazenar


● O dado que deseja ser armazenado
● O tempo que deseja que o cookie seja armazenado

setcookie("loged_user", $userName, time() + 60 * 60 * 4);

Acima, estamos armazenando o nome do usuário no cookie usando a chave “loged_user”


Esse cookie irá ficar salvo no navegador do usuário por 4 horas.
setar um cookie

Algumas coisas extras que valem à pena saber sobre cookies são:

● Podemos omitir a data de expiração e o cookie irá expirar quando o usuário fechar o
navegador (não funciona se ele fechar apenas a aba)
● Podemos informar mais dois parâmetros para o set cookie sendo o primeiro o caminho a o
qual o cookie será usado dentro da aplicação e o segundo o domínio o qual no qual ele
será usado. Normalmente não informamos esses valores.
● O método setcookie retorna true ou false para informar se o cookie foi ou não setado e
ele só retorna false "se existe uma chamada de output antes da chamada dessa função".
Funcionamento

Usuário faz uma requisição para o servidor. Nela setamos um cookie

Servidor informa no cabeçalho da requisição que o cookie precisa ser


salvo informando seus dados (chave, valor, expiração, …)
CLIENTE SERVIDOR

Nas próximas requisições o navegador envia os cookies salvos para o


servidor no cabeçalho da requisição
Tráfego dos cookies

RESPONSE: O servidor informa REQUEST: O cliente informa os cookies que estão salvos e
os cookies que precisam ser criados ainda não expiraram

HTTP/1.0 200 OK GET /sample_page.html HTTP/1.1

Content-type: text/html Host: www.example.org

Set-Cookie: yummy_cookie=choco Cookie: yummy_cookie=choco; tasty_cookie=strawberry

Set-Cookie: tasty_cookie=strawberry
Pegando o dado em um cookie

Dados armazenados usando cookie são referenciados pela variável superglobal $_COOKIE

Essa variável nada mais é do que um array associado, portanto podemos verificar se um dado
existe no cookie da seguinte forma:

<?php if (isset($_COOKIE["loged_user"])) {

Podemos pagar o valor salvo no cookie da seguinte forma:

$_COOKIE["loged_user"]
Limpando um dado do cookie

Para deletar o dado de um cookie NÃO devemos usar o código abaixo:


unset($_COOKIE["loged_user"]);

Esse código irá remover o dado armazenado na variável cookie APENAS da chamada atual

Para remover o e também usar a seguinte instrução:


setcookie('loged_user', null, -1);
Desafio

Criar uma tela de login que redirecione o usuário para a home com uma tela de boas vindas
customizada com o nome do usuário logado caso ele digite o usuário e a senha corretas. Caso
não esteja logado, ele deve ser redirecionado sempre para a tela de login.

Além disso, se ele digitar algo errado no login (seja no usuário ou na senha), ele deve ser
redirecionado para tela de login com uma mensagem de erro “Usuário ou senha inválidos”.

OBS: Para redirecionar o usuário para uma tela usamos a seguinte instrução:

header("Location: login.php");

E para garantir que nada mais seja executado no arquivo, chamamos a função die()
Session
Sessão

Forma de armazenar dados entre as requisições em um formato chave : valor

Difere dos cookies, os dados são armazenados no servidor e no próprio navegador

Garante uma maior segurança, uma vez que o usuário não tem acesso a ela

Normalmente é usado junto com um cookie onde esse irá armazenar um identificador único
para a sessão do usuário
Trabalhando com a sessão

sessionStart()
Deve ser usada em todos os arquivos em que for necessário trabalhar com a sessão
.
$_SESSION
Variável superglobal que representa a sessão (onde guardamos os valores desejados)
.
session_destroy();
Deve ser usada quando queremos destruir a sessão (eliminando todos os dados)
.
$_SESSION["loged_user"]
É um array associado, portanto trabalhamos com ele como tal
Status da Sessão

Existem diferentes formas de verificar se a sessão não está ativa em diferente versões do PHP:

Para versões superiores ou igual à 5.4.0


session_status() == PHP_SESSION_NONE

Para versões inferiores à 5.4.0


session_id() == ''
challenge ahead
Desafio

Criar uma tela de login que redirecione o usuário para a home com uma tela de boas vindas
customizada com o nome do usuário logado caso ele digite o usuário e a senha corretas. Caso
não esteja logado, ele deve ser redirecionado sempre para a tela de login.

Além disso, se ele digitar algo errado no login (seja no usuário ou na senha), ele deve ser
redirecionado para tela de login com uma mensagem de erro “Usuário ou senha inválidos”.

Além disso, criar um link de logout na home onde teremos que destruir a sessão e direcioná-lo
para a tela de login.
Interessado em cookies e sessão?

Cookies e sessões são muito utilizados no dia a dia do programador web

É muito importante conhecer e saber usar cada um dos conceitos

Quem estiver interessado, Klaus Laube tem uma postagem muito boa em
português que fala mais sobre esses dois assuntos

Interessados, basta clicar nesse link e bons estudos

Vous aimerez peut-être aussi