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
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!
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?
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.
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;
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>";
     }
?>
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!";
     }
?>
Exemplo – parte 3

<p>
  <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

       Usuario:<br /><input type="text" name="usuario" size="10" /><br />

       Senha:<br /><input type="password" name="senha" SIZE="10" /><br />

       <input type="submit" value="Login" />

  </form>

</p>

Aula 11 - Controle de sessão em PHP - Programação Web

  • 1.
    Programação Web FatecIpiranga 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 controlede 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 deatribuir 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 gerenciamentode 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 – parte1 <?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 – parte2 <?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!"; } ?>
  • 8.
    Exemplo – parte3 <p> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Usuario:<br /><input type="text" name="usuario" size="10" /><br /> Senha:<br /><input type="password" name="senha" SIZE="10" /><br /> <input type="submit" value="Login" /> </form> </p>