O documento discute o controle de sessão de usuários em aplicações web. Ele explica que o protocolo HTTP não mantém estado entre requisições e que cookies possuem limitações. Em seguida, apresenta o gerenciamento de sessões como uma solução, onde um identificador único (SID) é atribuído a cada visitante e correlacionado com informações do usuário. Por fim, exemplifica o uso de variáveis de sessão em PHP para armazenar dados do usuário durante a navegação.
Aula 11 - Controle de sessão em PHP - Programação Web
1. Programação Web
Fatec Ipiranga
Análise e Desenvolvimento de Sistemas
Aula 11 – Controle de sessão de usuário
Dalton Martins
dmartins@gmail.com
São Paulo, Novembro, 2011
2. Importância do controle de sessão
O protocolo HTTP, utilizado para trocar dados com um servidor web, não
faz controle de estado de conexão;
Ou seja, a cada nova requisição para um servidor, o protocolo não
considera o que ocorreu anteriormente;
Isso traz um problema quando queremos customizar o comportamento de
aplicações ao perfil de determinados usuários.
Umas das primeiras soluções para esse problema foi a utilização de
cookies → informações que são gravadas na máquina do usuário e
podem ser recuperadas por uma aplicação posteriormente;
No entanto, os cookies possuem limitações e fragilidades em termos de
segurança, não sendo o modo mais adequado par
Surge uma outra solução → gerenciamento de sessões!
3. Gerenciamento de sessões
É um dispositivo utilizado por alguns servidores e linguagens
de programação Web que:
→ cada visitante de um site recebe um identificador único, chamado
de SID (session ID);
→ o SID pode ser correlacionado com qualquer outro conjunto de
informações, como por exemplo, a cor de fundo do site, níveis de
permissão de acesso, módulos disponíveis, etc...
→ em termos de um banco de dados relacional, o SID pode ser uma
chave primária que correlaciona os dados de um usuário.
No entanto, como o SID é mantido fixo relacionado a um usuário se
o protocolo HTTP não guarda estado de conexão?
4. 2 modos de atribuir SID
1. Cookies:
Ao invés de guardar as preferências do usuário num
cookie em sua máquina, o novo mecanismo de
gerenciamento de sessão armazena apenas o SID
do usuário em um cookie local, ficando todo o resto
da informação a critério de controle da aplicação;
2. Reescrita da URL:
É um mecanismo que incorpora na URL o código SID
de um usuário. É um modo mais frágil.
5. Trabalhando com gerenciamento de
sessão
Alguns recursos fundamentais:
→ session_start() : inicializa uma sessão e, se já inicializada,
recupera as variáveis de sessão atuais numa página;
→ session_destroy() : finaliza a sessão, destruindo todas as
variáveis em utilização;
→ variáveis estilo $_SESSION['nome'] : é o mecanismo que
permite criarmos variáveis de sessão. Podemos utilizar
quantas acharmos necessário;
→ session_encode() : codifica as variáveis de sessão é uma
única linha string. Facilita gravar logs em banco de dados;
→ session_decode() : decodifica as variáveis, permitindo
separá-las novamente;
6. Exemplo – parte 1
<?php
session_start();
if (! isset($_SESSION['usuario'])) {
if (isset($_POST['usuario'])) {
$_SESSION['usuario']=$_POST['usuario'];
echo "Usuario registrado! Recarregue a página para ver o que ocorre!";
}
else
{
require_once('login.html');
}
}
else
{
echo "O seu identificador de sessão é ".session_id()."<br>";
$_SESSION['usuario']="pedro";
$_SESSION['datalogin']= date("M d Y H:i:s");
echo "<br>";
echo "Nome de usuario..: ".$_SESSION['usuario']."<br>";
echo "Data de login....: ".$_SESSION['datalogin']."<br><br>";
$codificasessao = session_encode();
echo $codificasessao."<br><br>";
echo "<a href="outroarquivo.php">Acessar outro arquivo para testar variaveis de sessao</a>";
}
?>
7. Exemplo – parte 2
<?php
session_start();
if (isset($_SESSION['usuario'])) {
echo "Sessao previamente iniciada <br>";
echo "Usuario logado...: ".$_SESSION['usuario']."<br>";
echo "Finalizando a sessao...<br>";
session_destroy();
echo "<a href="controleteste.php">Acessar arquivo inicial para testar variaveis de sessao</a>";
}
else
{
echo "A sessao nao foi previamente iniciada!";
}
?>