SlideShare uma empresa Scribd logo
1 de 31
Programação para WEB
Regis Pires Magalhães
regispiresmag@gmail.com
PHP:
Sessões, Cookies,
Cabeçalhos HTTP,
Autenticação e Autorização
Sessões
 Permitem armazenar informações importantes do usuário
do site e acessá-las em qualquer página por determinado
período de tempo.
 Servem para armazenamento de dados no servidor.
 Pode ser importante armazenar as informações do
usuário, como sua identificação de login, seu carrinho de
compras, produtos visitados, etc.
 Um arquivo no servidor é criado por padrão no diretório
temporário, com o nome do arquivo iniciando por “sess_”
e seguido do ID da sessão:
 Arquivo: sess_4e2eca1a2b20237ce861d690c68294cf
 Caminho: C:xampptmp
 No Ubuntu: /var/lib/php5/
ID de Sessão
 Há 2 formas de passar o ID de sessão para o
servidor:
 Via Cookie (Recomendada)
 Via parâmetro de URL (só em último caso – cookies
desabilitados no navegador)
 O ID de sessão é inserido diretamente na URL.
ID de Sessão via Cookie
 Ao fazer uso de sessão em PHP, um cookie chamado
PHPSESSID (identificador de sessão do PHP) é
automaticamente criado no navegador para identificar
que sessão está sendo usada no servidor. Este cookie é
automaticamente excluído quando o navegador for
fechado.
Iniciando uma Sessão
 Para iniciar uma nova sessão ou para abrir uma sessão
já iniciada, deve-se usar a função session_start().
 session_start() OBRIGATORIAMENTE deve vir
antes de qualquer saída HTML.
Armazenando algo na Sessão
 Opções:
 Via variável $_SESSION
 Via função session_register()
Armazenando algo na Sessão
<?php
session_start();
$variavel_01 = "Programação";
$variavel_02 = "para WEB";
session_register('variavel_01');
$_SESSION['variavel_02'] = $variavel_02;
?>
<html>
<head>
<title>CEFET-PI PHB</title>
</head>
<body>
<p>Informações sobre a sessão:</p>
<?php
echo '<p>Session ID: '.session_id().'</p>';
print_r($_SESSION);
?>
</p>
</body>
</html>
Eliminando algo da Sessão
 session_unregister()
 Elimina uma determinada variável da sessão.
 session_unset()
 Elimina todas as variáveis da sessão.
Tempo de vida da Sessão
 session_cache_expire()
 Retorna o tempo de expiração das sessões
ou define novo tempo de expiração em
minutos.
 Para redefinir o tempo de expiração, deve ser
executada antes de session_start().
 Tempo padrão de duração da sessão: 180
minutos
 Para alterar o tempo padrão, deve-se chamar
session_cache_expire() a cada página que
faça uso da sessão.
Destruindo uma Sessão
 A destruição da sessão é feita através da
função session_destroy().
 Antes de chamar a função
session_destroy(), deve-se primeiro abrir a
sessão com session_start().
 Essa função é normalmente utilizada
quando um usuário requisita sua saída da
aplicação (logout).
Cookie
 É uma pequena quantidade de informação armazenada na
máquina cliente que possibilita a identificação de informações
dos usuários que acessam o servidor.
 Pode estar na memória do navegador ou armazenada no
disco.
 Contém um par: chave, valor.
 Usar com moderação.
 O uso de cookies pode permitir que o usuário após ter se
autenticado, desligue o computador, acesse o site um tempo
depois e não precise se autenticar novamente. Ex: GMail,
Hotmail, Yahoo, etc.
 Para utilizar esse recurso, o usuário aceita a opção “salvar
as minhas informações neste computador”.
Informações contidas em um Cookie
 Nome: PHPSESSID
 Valor: 4e2eca1a2b20237ce861d690c68294cf
 Servidor: localhost
 Caminho: /
 Enviar: em todos os tipos
de conexão
 Validade: até sair do Firefox
Cookie
 Os cookies são uma parte do cabeçalho HTTP, logo
a função setcookie() precisa ser chamada antes
que qualquer outro dado seja enviado ao navegador.
 Qualquer cookie enviado para o cliente
automaticamente será incluido no array $_COOKIE.
 Para armazenar um array em cookies, acrescente []
ao nome do cookie.
Adicionando Cookies
<?php
/* dura até o fechamento do browser */
setcookie('meu_cookie1', 'PHP');
/* dura 1 hora */
setcookie('meu_cookie2', 'WEB', time()+3600);
/* dura 1 hora */
setcookie('meu_cookie3', 'NOW', time()+3600,
'/regis/', '');
?>
Usando Cookies
<?php
echo 'meu_cookie1: ';
echo $_COOKIE['meu_cookie1'].'<br/>';
echo 'meu_cookie2: ';
echo $_COOKIE['meu_cookie2'].'<br/>';
echo 'meu_cookie3: ';
echo $_COOKIE['meu_cookie3'].'<br/>';
print_r($_COOKIE);
?>
Removendo Cookies
<?php
// configurar valor com string vazia
setcookie ('meu_cookie1', '');
setcookie ('meu_cookie2', '');
// configurar a data de expiração para o passado
setcookie ('meu_cookie3', '', time() - 3600);
?>
Adicionando Array em Cookies
<?php
setcookie('pessoa[0]', 'Maria');
setcookie('pessoa[1]', 'João');
setcookie('pessoa[2]', 'José');
?>
Contador (Session)
<?php
session_start();
$_SESSION['contador_session']++;
?>
<html>
<head>
<title>Contador</title>
</head>
<body>
<p>Contador Session:
<?php echo $_SESSION['contador_session'] ?></p>
</body>
</html>
Contador (Cookie)
<?php
setcookie('contador_cookie',
$_COOKIE['contador_cookie'] + 1);
?>
<html>
<head>
<title>Contador</title>
</head>
<body>
<p>Contador Cookie:
<?php echo $_COOKIE['contador_cookie'] ?></p>
</body>
</html>
Inserindo itens em um array – usando
Session
<?php
session_start();
if (strlen(trim($_POST['nome'])) > 0) {
if (gettype($_SESSION['nomes']) == 'array') {
array_push($_SESSION['nomes'], $_POST['nome']);
} else {
$_SESSION['nomes'] = array($_POST['nome']);
}
}
?>
<html>
<head><title>Array usando Session</title></head>
<body>
<form action="session_array.php" method="post">
<p>Nome: <input name="nome" type="text"/></p>
<input type="submit" value="Inserir Nome"/>
</form>
<?php
if (isset($_SESSION['nomes'])) {
echo '<p>Nomes inseridos na sessão:</p>';
foreach ($_SESSION['nomes'] as $item) {
echo $item.'<br/>';
}
}
?>
</body>
</html>
Inserindo itens em um array – usando
Cookies
<?php
if (strlen(trim($_POST['nome'])) > 0) {
$tamanho = count($_COOKIE['nomes']);
setcookie("nomes[$tamanho]", $_POST['nome']);
}
?>
<html>
<head><title>Array usando Cookies</title></head>
<body>
<form action="cookies_array.php" method="post">
<p>Nome: <input name="nome" type="text"/></p>
<input type="submit" value="Inserir Nome"/>
</form>
<?php
if (isset($_COOKIE['nomes'])) {
echo '<p>Nomes inseridos no cookie:</p>';
foreach ($_COOKIE['nomes'] as $item) {
echo $item.'<br/>';
}
echo $_POST['nome'].'<br/>';
}
?>
</body>
</html>
Cabeçalhos HTTP
 Redirecionamento de página
 A função exit interrompe a execução do script e
pode mostrar uma mensagem.
<?php
header('Location: http://localhost/xampp');
exit;
?>
<?php
$servidor = 'http://' . $_SERVER['HTTP_HOST'];
header('Location: ' . $servidor . '/xampp/');
exit;
?>
Redirecionamento via HTML
<html>
<head>
<meta http-equiv="refresh"
content="0;url=http://localhost/xampp/" />
</head>
<body>
<p>Redirecionando...</p>
</body>
</html>
Itens via Cookies - Exibição
<!-- array_cookies.php -->
<html>
<head><title>Array usando Cookies</title></head>
<body>
<form action="array_cookies_processa.php" method="post">
<p>Nome: <input name="nome" type="text"/></p>
<input type="submit" value="Inserir Nome"/>
</form>
<?php
if (isset($_COOKIE['nomes'])) {
echo '<p>Nomes inseridos no cookie:</p>';
$i = 1;
foreach ($_COOKIE['nomes'] as $item) {
echo "$i. $item <a
href="array_cookies_processa.php? remover=$item">
Remover</a><br/>";
$i++;
}
}
?>
</body>
</html>
Itens via Cookies - Processamento
<!-- array_cookies_processa.php -->
<?php
if (isset($_GET[remover])) {
$posicao = array_search($_GET[remover], $_COOKIE['nomes']);
setcookie("nomes[$posicao]", '');
header('Location: array_cookies.php');
exit;
} else if (strlen(trim($_POST['nome'])) > 0) {
end($_COOKIE['nomes']);
$pos_final = key($_COOKIE['nomes']) + 1;
setcookie("nomes[$pos_final]", $_POST['nome']);
header('Location: array_cookies.php');
exit;
}
?>
Autenticação e Autorização
 Autenticação
 É o processo de identificação dos usuários do
aplicativo.
 Normalmente essa identificação é determinada
pelo par usuário e senha, mas também pode ser
feita através de biometria, etc.
 Autorização
 Controla as permissões de acesso de usuários
autenticados a recursos do sistema.
 Determina se um usuário autenticado pode ou
não acessar um determinado recurso.
Autenticação HTTP
 O protocolo HTTP permite o pedido de usuário
e senha via janela pop-up.
 Isso é feito através do cabeçalho WWW-
Authenticate.
 Após a autenticação, as seguintes variáveis
são criadas:
 $_SERVER['PHP_AUTH_USER'] – Usuário
 $_SERVER['PHP_AUTH_PW'] – Senha
 $_SERVER['PHP_AUTH_TYPE'] – Basic
Autenticação HTTP
<?php
function authenticate() {
header('WWW-Authenticate: Basic realm="Login"');
header('HTTP/1.0 401 Unauthorized');
echo 'Usuário ou senha invalido(s).';
exit;
}
if (!isset($_SERVER['PHP_AUTH_USER'])) {
authenticate();
}
if ($_SERVER['PHP_AUTH_USER'] != 'regis' ||
$_SERVER['PHP_AUTH_PW'] != '1234') {
authenticate();
}
?>
<html>
<head><title>Página inicial</title></head>
<body>
<p>Bem-vindo ao nosso site!!!</p>
</body>
</html>
Autenticação – index.php
<?php
session_start();
$usuario = $_SESSION[usuario];
?>
<html>
<head>
<meta http-equiv="content-type"
content="text/html;charset=UTF-8" />
<title>Página inicial</title>
</head>
<body>
<h1>Nossa aplicação</h1>
<?php if ($usuario) { ?>
<p><?php echo $usuario; ?>, seja bem-vindo ao nosso
site. Clique <a href="sair.php">aqui</a>
para sair.</p>
<?php } else { ?>
<p>É necessário fazer <a href="login.php">Login
</a> para acessar o sistema.</p>
<?php } ?>
</body>
</html>
Autenticação – login.php
<?php
session_start();
$usuario = $_POST[usuario];
$senha = $_POST[senha];
if ($usuario == 'regis' && $senha == '12345') {
$_SESSION[usuario] = $usuario;
header('Location: index.php');
exit;
} else {
if ($usuario && $senha)
$mensagem = 'Usuário e/ou senha inválido(s). Tente novamente...';
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Página de Login</title>
</head>
<body>
<h1>Login</h1>
<?php if ($mensagem) {
echo "<p>$mensagem</p>";
} ?>
<form action="login.php" method="POST">
<p>Usuário: <input type="text" name="usuario" /></p>
<p>Senha: <input type="password" name="senha" /></p>
<p><input type="submit" />
</form>
</body>
</html>
Autenticação – sair.php
<?php
session_start();
session_destroy();
header('Location: index.php');
?>

Mais conteúdo relacionado

Mais procurados

Mais procurados (15)

Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Programação Server Side I - Aula 2
Programação Server Side I - Aula 2Programação Server Side I - Aula 2
Programação Server Side I - Aula 2
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 
Framework Codeigniter - Sessão
Framework Codeigniter - SessãoFramework Codeigniter - Sessão
Framework Codeigniter - Sessão
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBC
 
Empacotamento Debian Básico
Empacotamento Debian BásicoEmpacotamento Debian Básico
Empacotamento Debian Básico
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Introdução ao Apache Ant
Introdução ao Apache AntIntrodução ao Apache Ant
Introdução ao Apache Ant
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
HTML5 - Web storage
HTML5 - Web storageHTML5 - Web storage
HTML5 - Web storage
 
Aula android 02.pdf
Aula android 02.pdfAula android 02.pdf
Aula android 02.pdf
 
Registros no windows 7
Registros no windows 7Registros no windows 7
Registros no windows 7
 
Certificacao linux lpi
Certificacao linux lpiCertificacao linux lpi
Certificacao linux lpi
 

Destaque

Cookies
CookiesCookies
CookiesRR2009
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e RespostaThiago Rondon
 
Cookies e Sessions no HTTP
Cookies e Sessions no HTTPCookies e Sessions no HTTP
Cookies e Sessions no HTTPWillian Watanabe
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webRegis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...Leonel Morgado
 
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosSegurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosLuis Cipriani
 
Redes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasRedes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasMarcelo Charan
 

Destaque (20)

Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Lean Startup
Lean StartupLean Startup
Lean Startup
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
 
Cookies
CookiesCookies
Cookies
 
Cookies
CookiesCookies
Cookies
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Dicas para PC
Dicas para PCDicas para PC
Dicas para PC
 
Cookies e Sessions no HTTP
Cookies e Sessions no HTTPCookies e Sessions no HTTP
Cookies e Sessions no HTTP
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
HTTP - Visão geral
HTTP - Visão geralHTTP - Visão geral
HTTP - Visão geral
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
 
HTTP
HTTPHTTP
HTTP
 
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosSegurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
 
Redes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasRedes I - Conceitos e Tecnologias
Redes I - Conceitos e Tecnologias
 
Protocolo Http
Protocolo HttpProtocolo Http
Protocolo Http
 

Semelhante a Programação PHP: Sessões, Cookies, HTTP e Autenticação

Semelhante a Programação PHP: Sessões, Cookies, HTTP e Autenticação (20)

Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
 
Aula 11 - Controle de sessão em PHP - Programação Web
Aula 11  - Controle de sessão em PHP - Programação WebAula 11  - Controle de sessão em PHP - Programação Web
Aula 11 - Controle de sessão em PHP - Programação Web
 
Aula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHPAula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHP
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Aula 5
Aula 5Aula 5
Aula 5
 
PHP MySQL Aula 08
PHP MySQL Aula 08PHP MySQL Aula 08
PHP MySQL Aula 08
 
Cookies
CookiesCookies
Cookies
 
Palestra de segurança em PHP - Hacking
Palestra de segurança em PHP - HackingPalestra de segurança em PHP - Hacking
Palestra de segurança em PHP - Hacking
 
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugarUtilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Bloco 5.4
Bloco 5.4Bloco 5.4
Bloco 5.4
 
Sessao
SessaoSessao
Sessao
 
Aula 2
Aula 2Aula 2
Aula 2
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Boas práticas de Automação de Testes
Boas práticas de Automação de TestesBoas práticas de Automação de Testes
Boas práticas de Automação de Testes
 

Mais de Regis Magalhães

Mais de Regis Magalhães (20)

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
java 00 Introducao
java 00 Introducaojava 00 Introducao
java 00 Introducao
 

Programação PHP: Sessões, Cookies, HTTP e Autenticação

  • 1. Programação para WEB Regis Pires Magalhães regispiresmag@gmail.com PHP: Sessões, Cookies, Cabeçalhos HTTP, Autenticação e Autorização
  • 2. Sessões  Permitem armazenar informações importantes do usuário do site e acessá-las em qualquer página por determinado período de tempo.  Servem para armazenamento de dados no servidor.  Pode ser importante armazenar as informações do usuário, como sua identificação de login, seu carrinho de compras, produtos visitados, etc.  Um arquivo no servidor é criado por padrão no diretório temporário, com o nome do arquivo iniciando por “sess_” e seguido do ID da sessão:  Arquivo: sess_4e2eca1a2b20237ce861d690c68294cf  Caminho: C:xampptmp  No Ubuntu: /var/lib/php5/
  • 3. ID de Sessão  Há 2 formas de passar o ID de sessão para o servidor:  Via Cookie (Recomendada)  Via parâmetro de URL (só em último caso – cookies desabilitados no navegador)  O ID de sessão é inserido diretamente na URL.
  • 4. ID de Sessão via Cookie  Ao fazer uso de sessão em PHP, um cookie chamado PHPSESSID (identificador de sessão do PHP) é automaticamente criado no navegador para identificar que sessão está sendo usada no servidor. Este cookie é automaticamente excluído quando o navegador for fechado.
  • 5. Iniciando uma Sessão  Para iniciar uma nova sessão ou para abrir uma sessão já iniciada, deve-se usar a função session_start().  session_start() OBRIGATORIAMENTE deve vir antes de qualquer saída HTML.
  • 6. Armazenando algo na Sessão  Opções:  Via variável $_SESSION  Via função session_register()
  • 7. Armazenando algo na Sessão <?php session_start(); $variavel_01 = "Programação"; $variavel_02 = "para WEB"; session_register('variavel_01'); $_SESSION['variavel_02'] = $variavel_02; ?> <html> <head> <title>CEFET-PI PHB</title> </head> <body> <p>Informações sobre a sessão:</p> <?php echo '<p>Session ID: '.session_id().'</p>'; print_r($_SESSION); ?> </p> </body> </html>
  • 8. Eliminando algo da Sessão  session_unregister()  Elimina uma determinada variável da sessão.  session_unset()  Elimina todas as variáveis da sessão.
  • 9. Tempo de vida da Sessão  session_cache_expire()  Retorna o tempo de expiração das sessões ou define novo tempo de expiração em minutos.  Para redefinir o tempo de expiração, deve ser executada antes de session_start().  Tempo padrão de duração da sessão: 180 minutos  Para alterar o tempo padrão, deve-se chamar session_cache_expire() a cada página que faça uso da sessão.
  • 10. Destruindo uma Sessão  A destruição da sessão é feita através da função session_destroy().  Antes de chamar a função session_destroy(), deve-se primeiro abrir a sessão com session_start().  Essa função é normalmente utilizada quando um usuário requisita sua saída da aplicação (logout).
  • 11. Cookie  É uma pequena quantidade de informação armazenada na máquina cliente que possibilita a identificação de informações dos usuários que acessam o servidor.  Pode estar na memória do navegador ou armazenada no disco.  Contém um par: chave, valor.  Usar com moderação.  O uso de cookies pode permitir que o usuário após ter se autenticado, desligue o computador, acesse o site um tempo depois e não precise se autenticar novamente. Ex: GMail, Hotmail, Yahoo, etc.  Para utilizar esse recurso, o usuário aceita a opção “salvar as minhas informações neste computador”.
  • 12. Informações contidas em um Cookie  Nome: PHPSESSID  Valor: 4e2eca1a2b20237ce861d690c68294cf  Servidor: localhost  Caminho: /  Enviar: em todos os tipos de conexão  Validade: até sair do Firefox
  • 13. Cookie  Os cookies são uma parte do cabeçalho HTTP, logo a função setcookie() precisa ser chamada antes que qualquer outro dado seja enviado ao navegador.  Qualquer cookie enviado para o cliente automaticamente será incluido no array $_COOKIE.  Para armazenar um array em cookies, acrescente [] ao nome do cookie.
  • 14. Adicionando Cookies <?php /* dura até o fechamento do browser */ setcookie('meu_cookie1', 'PHP'); /* dura 1 hora */ setcookie('meu_cookie2', 'WEB', time()+3600); /* dura 1 hora */ setcookie('meu_cookie3', 'NOW', time()+3600, '/regis/', ''); ?>
  • 15. Usando Cookies <?php echo 'meu_cookie1: '; echo $_COOKIE['meu_cookie1'].'<br/>'; echo 'meu_cookie2: '; echo $_COOKIE['meu_cookie2'].'<br/>'; echo 'meu_cookie3: '; echo $_COOKIE['meu_cookie3'].'<br/>'; print_r($_COOKIE); ?>
  • 16. Removendo Cookies <?php // configurar valor com string vazia setcookie ('meu_cookie1', ''); setcookie ('meu_cookie2', ''); // configurar a data de expiração para o passado setcookie ('meu_cookie3', '', time() - 3600); ?>
  • 17. Adicionando Array em Cookies <?php setcookie('pessoa[0]', 'Maria'); setcookie('pessoa[1]', 'João'); setcookie('pessoa[2]', 'José'); ?>
  • 19. Contador (Cookie) <?php setcookie('contador_cookie', $_COOKIE['contador_cookie'] + 1); ?> <html> <head> <title>Contador</title> </head> <body> <p>Contador Cookie: <?php echo $_COOKIE['contador_cookie'] ?></p> </body> </html>
  • 20. Inserindo itens em um array – usando Session <?php session_start(); if (strlen(trim($_POST['nome'])) > 0) { if (gettype($_SESSION['nomes']) == 'array') { array_push($_SESSION['nomes'], $_POST['nome']); } else { $_SESSION['nomes'] = array($_POST['nome']); } } ?> <html> <head><title>Array usando Session</title></head> <body> <form action="session_array.php" method="post"> <p>Nome: <input name="nome" type="text"/></p> <input type="submit" value="Inserir Nome"/> </form> <?php if (isset($_SESSION['nomes'])) { echo '<p>Nomes inseridos na sessão:</p>'; foreach ($_SESSION['nomes'] as $item) { echo $item.'<br/>'; } } ?> </body> </html>
  • 21. Inserindo itens em um array – usando Cookies <?php if (strlen(trim($_POST['nome'])) > 0) { $tamanho = count($_COOKIE['nomes']); setcookie("nomes[$tamanho]", $_POST['nome']); } ?> <html> <head><title>Array usando Cookies</title></head> <body> <form action="cookies_array.php" method="post"> <p>Nome: <input name="nome" type="text"/></p> <input type="submit" value="Inserir Nome"/> </form> <?php if (isset($_COOKIE['nomes'])) { echo '<p>Nomes inseridos no cookie:</p>'; foreach ($_COOKIE['nomes'] as $item) { echo $item.'<br/>'; } echo $_POST['nome'].'<br/>'; } ?> </body> </html>
  • 22. Cabeçalhos HTTP  Redirecionamento de página  A função exit interrompe a execução do script e pode mostrar uma mensagem. <?php header('Location: http://localhost/xampp'); exit; ?> <?php $servidor = 'http://' . $_SERVER['HTTP_HOST']; header('Location: ' . $servidor . '/xampp/'); exit; ?>
  • 23. Redirecionamento via HTML <html> <head> <meta http-equiv="refresh" content="0;url=http://localhost/xampp/" /> </head> <body> <p>Redirecionando...</p> </body> </html>
  • 24. Itens via Cookies - Exibição <!-- array_cookies.php --> <html> <head><title>Array usando Cookies</title></head> <body> <form action="array_cookies_processa.php" method="post"> <p>Nome: <input name="nome" type="text"/></p> <input type="submit" value="Inserir Nome"/> </form> <?php if (isset($_COOKIE['nomes'])) { echo '<p>Nomes inseridos no cookie:</p>'; $i = 1; foreach ($_COOKIE['nomes'] as $item) { echo "$i. $item <a href="array_cookies_processa.php? remover=$item"> Remover</a><br/>"; $i++; } } ?> </body> </html>
  • 25. Itens via Cookies - Processamento <!-- array_cookies_processa.php --> <?php if (isset($_GET[remover])) { $posicao = array_search($_GET[remover], $_COOKIE['nomes']); setcookie("nomes[$posicao]", ''); header('Location: array_cookies.php'); exit; } else if (strlen(trim($_POST['nome'])) > 0) { end($_COOKIE['nomes']); $pos_final = key($_COOKIE['nomes']) + 1; setcookie("nomes[$pos_final]", $_POST['nome']); header('Location: array_cookies.php'); exit; } ?>
  • 26. Autenticação e Autorização  Autenticação  É o processo de identificação dos usuários do aplicativo.  Normalmente essa identificação é determinada pelo par usuário e senha, mas também pode ser feita através de biometria, etc.  Autorização  Controla as permissões de acesso de usuários autenticados a recursos do sistema.  Determina se um usuário autenticado pode ou não acessar um determinado recurso.
  • 27. Autenticação HTTP  O protocolo HTTP permite o pedido de usuário e senha via janela pop-up.  Isso é feito através do cabeçalho WWW- Authenticate.  Após a autenticação, as seguintes variáveis são criadas:  $_SERVER['PHP_AUTH_USER'] – Usuário  $_SERVER['PHP_AUTH_PW'] – Senha  $_SERVER['PHP_AUTH_TYPE'] – Basic
  • 28. Autenticação HTTP <?php function authenticate() { header('WWW-Authenticate: Basic realm="Login"'); header('HTTP/1.0 401 Unauthorized'); echo 'Usuário ou senha invalido(s).'; exit; } if (!isset($_SERVER['PHP_AUTH_USER'])) { authenticate(); } if ($_SERVER['PHP_AUTH_USER'] != 'regis' || $_SERVER['PHP_AUTH_PW'] != '1234') { authenticate(); } ?> <html> <head><title>Página inicial</title></head> <body> <p>Bem-vindo ao nosso site!!!</p> </body> </html>
  • 29. Autenticação – index.php <?php session_start(); $usuario = $_SESSION[usuario]; ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Página inicial</title> </head> <body> <h1>Nossa aplicação</h1> <?php if ($usuario) { ?> <p><?php echo $usuario; ?>, seja bem-vindo ao nosso site. Clique <a href="sair.php">aqui</a> para sair.</p> <?php } else { ?> <p>É necessário fazer <a href="login.php">Login </a> para acessar o sistema.</p> <?php } ?> </body> </html>
  • 30. Autenticação – login.php <?php session_start(); $usuario = $_POST[usuario]; $senha = $_POST[senha]; if ($usuario == 'regis' && $senha == '12345') { $_SESSION[usuario] = $usuario; header('Location: index.php'); exit; } else { if ($usuario && $senha) $mensagem = 'Usuário e/ou senha inválido(s). Tente novamente...'; } ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Página de Login</title> </head> <body> <h1>Login</h1> <?php if ($mensagem) { echo "<p>$mensagem</p>"; } ?> <form action="login.php" method="POST"> <p>Usuário: <input type="text" name="usuario" /></p> <p>Senha: <input type="password" name="senha" /></p> <p><input type="submit" /> </form> </body> </html>