Como uma sessão funciona

A sessão web é bem parecida com a sessão de um PC, que ao iniciar, temos que colocar usuário e senha, assim seu computador pode saber quem está usando a máquina e guardar os registros com segurança. Em um site ou sistema web, a sessão é importante quando se quer mais segurança na página ou quando se quer ter um controle de usuário. Também alguns programadores utilizam-se deste recurso para guardar informações e também pode-se montar um carrinho de compra de um site de vendas, pois assim vão armazenando-se os itens ou produtos e só no final é que os dados são jogados no banco de dados.

Observação: ”A variável de sessão PHP é usada para armazenar informações sobre, ou alterar as configurações do sistema ou site para uma sessão de usuário. As variáveis ​​de sessão armazenam informações sobre um único usuário e estão disponíveis para todas as páginas em um único aplicativo”.

Neste artigo esperamos que o leitor tenha conhecimento básico em PHP e que já saiba manusear algum servidor PHP (Easyphp, Apache ou Xampp). Neste exemplo usaremos o EasyPHP12, com banco de dados MySQL.

Agora vamos ter uma visão geral da nossa área de login. Observe a Figura 1 e depois acompanhe a explicação da lógica e relação das páginas que vamos criar.

Na Figura 1 vemos a lógica de funcionamento da sessão que criaremos.

Lógica de funcionamento da sessão
Figura 1. Lógica de funcionamento da sessão

Em um site, a página principal fica na página cujo nome obrigatoriamente é index. No nosso exemplo temos um sistema on-line que quando acessado a primeira coisa em que ele mostra ao usuário é a área de login, para que só possam acessar o conteúdo do sistema web os usuários cadastrados que passarem pelo login. Por isso na nossa página index.php não iremos colocar o conteúdo em si do nosso sistema e sim criaremos um formulário de login. Então observe o layout da figura 1, veja que no ponto 1(um) temos a página principal, a “index.php”, lá ficará o formulário com os campos: “nome”, “senha” e um botão com o nome de logar, que ao ser clicado levará as informações para a página “ope.php”(o nome ope.php é opcional, lembre-se de que você pode dar qualquer nome às suas páginas), que por sua vez coleta as informações digitadas no formulário da página index.php e se conecta com o database (ponto 2). Ao se conectar com o banco de dados, a página ope.php compara se existe realmente algum registro cujo os campos nome e senha são idênticos ao que ele coletou no database. Ao retornar com o comparativo (ponto3), se for verdadeiro (se existir um registro no bando dessa pessoa), a página ope.php redirecionará o usuário para a página chamada site.php, onde está realmente o conteúdo principal, ou seja, a página principal do sistema. Se for falso o comparativo (se não existir registro idêntico no bando de dados), a página ope.php redirecionará o usuário para a página de início para que ele possa tentar novamente fazer seu login.

Agora que entendemos a lógica e a relação das nossas páginas, vamos então criá-las, mas para isso o leitor já tem que estar com os seguintes requisitos em sua máquina (requisitos baseados no nosso exemplo).

Um banco de dados instalado com no mínimo uma tabela:

  • NOME DO BANCO: SERVER;
  • NOME DA TABELA: USUARIO;

com os seguintes campos:

  • ID_USER do tipo INT tamanho 4 e marcado como primare key e auto increment;
  • NOME do tipo VACHAR tamanho 50;
  • SENHA do tipo VACHAR tamanho 50.

No artigo foi usado o programa EasyPHP 12.1, que já simula um servidor local e vem com o PhpMyAdmin.

Depois de instalado o EasyPHP e criado o banco de dados com a tabela e seus campos necessários, vamos criar nossa primeira página, que será a index.php. Na Listagem 1 vemos o código fonte da página devidamente comentado para que o leitor possa compreender de forma mais clara.

/* na primeira linha usaremos o “action=ope.php” para que o formulário repasse 
as informações para a página ope.php */
<form method="post" action="ope.php" id="formlogin" name="formlogin" >
<fieldset id="fie">
<legend>LOGIN</legend><br />
<label>NOME : </label>
// o campo “name” dentro do input e importante, 
// pois será ele que armazenará os dados digitados . 
<input type="text" name="login" id="login"  /><br />
<label>SENHA :</label>
<input type="password" name="senha" id="senha" /><br />
<input type="submit" value="LOGAR  "  />
</fieldset>
</form>
Listagem 1. Código fonte da do formulário da página index.php
Observação: Lembre-se de que neste artigo estamos abordando o Login de um sistema através de uma SESSION, não nos deteremos no visual (CSS, jQuery), essa área fica sob responsabilidade do leitor.

Agora vamos criar a página “ope.php”, que terá inúmeras funções, por isso é de extrema importância a observação e acompanhamento detalhado do código fonte e seus comentários na Listagem 2, logo abaixo.

Essa página primeiramente receberá os dados da página index.php, se conectará ao database para pesquisa e logo após decidirá se o usuário passará ou não para dentro do sistema.

<?php 
// session_start inicia a sessão
session_start();
// as variáveis login e senha recebem os dados digitados na página anterior
$login = $_POST['login'];
$senha = $_POST['senha'];
// as próximas 3 linhas são responsáveis em se conectar com o bando de dados.
$con = mysql_connect("127.0.0.1", "root", "digite a senha do banco aqui") or die 
 ("Sem conexão com o servidor");
$select = mysql_select_db("server") or die("Sem acesso ao DB, Entre em 
contato com o Administrador, gilson_sales@bytecode.com.br");

// A variavel $result pega as varias $login e $senha, faz uma 
//pesquisa na tabela de usuarios
$result = mysql_query("SELECT * FROM `USUARIO` 
WHERE `NOME` = '$login' AND `SENHA`= '$senha'");
/* Logo abaixo temos um bloco com if e else, verificando se a variável $result foi 
bem sucedida, ou seja se ela estiver encontrado algum registro idêntico o seu valor
será igual a 1, se não, se não tiver registros seu valor será 0. Dependendo do 
resultado ele redirecionará para a página site.php ou retornara  para a página 
do formulário inicial para que se possa tentar novamente realizar o login */
if(mysql_num_rows ($result) > 0 )
{
$_SESSION['login'] = $login;
$_SESSION['senha'] = $senha;
header('location:site.php');
}
else{
  unset ($_SESSION['login']);
  unset ($_SESSION['senha']);
  header('location:index.php');
  
  }
?>
Listagem 2. Página ope.php

Pronto, agora que temos a página de login (index.php) e a página que recebe os dados e verifica no banco se o usuário está ou não cadastrado (ope.php), vamos criar a página principal (site.php), para que se o usuário estiver devidamente cadastrado no banco, seja redirecionado para ela. Note que a responsabilidade de passar ou não para página mestre do seu sistema (site.php), será a “ope.php”.

Iremos agora criar a página com o conteúdo do seu sistema (neste caso meramente ilustrativo), e daremos uma ênfase maior no banner da página, pois ali colocaremos alguns códigos de segurança que explicaremos logo mais.

<!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>
<?php  
/* esse bloco de código em php verifica se existe a sessão, pois o usuário pode
 simplesmente não fazer o login e digitar na barra de endereço do seu navegador 
o caminho para a página principal do site (sistema), burlando assim a obrigação de 
fazer um login, com isso se ele não estiver feito o login não será criado a session, 
então ao verificar que a session não existe a página redireciona o mesmo
 para a index.php.*/
session_start();
if((!isset ($_SESSION['login']) == true) and (!isset ($_SESSION['senha']) == true))
{
  header('location:index.php');
  }

$logado = $_SESSION['login'];
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SISTEMA WEB</title>
</head>

<body>
<table width="800" height="748" border="1">
  <tr>
    <td height="90" colspan="2" bgcolor="#CCCCCC">SISTEM WEB TESTE
    <?php 
  echo" Bem vindo $logado";
  ?>
    </td>
  </tr>
  <tr>
    <td width="103" height="410" bgcolor="#CCCCCC">MENU AQUI</td>
    <td width="546">CONTEUDO E ICONES AQUI</td>
  </tr>
  <tr>
    <td colspan="2" bgcolor="#000000"> </td>
  </tr>
</table>
</body>
</html>
Listagem 3. Página site.php

Após todo esse processo aproveite e faça o teste na sua máquina. Não esqueça que neste artigo foi abordada somente a lógica do funcionamento de uma “session login”, para que você possa se familiarizar com o ambiente, por isso deixamos de lado a parte visual das páginas. Esperamos ter contribuído e caso surjam quaisquer dúvidas, pode postar, pois esse assunto é por demais extenso e abrange muito mais a área de segurança na web. Um forte abraço e te a próxima.

Links

Saiba mais sobre PHP ;)

  • Documentação: PHP: While e Do While:
    Este documento apresenta as estruturas de repetição while e do while, recursos que possibilitam executar trechos de código repetidamente com base em uma expressão booleana.
  • Como implementar o MVC em PHP:
    O padrão MVC é amplamente utilizado no desenvolvimento de aplicações web, e saber implementá-lo é importante para trabalhar de forma eficiente com frameworks como CodeIgniter e Laravel, bem como para desenvolver projetos sem depender dessas soluções de terceiros.
  • Documentação: PHP: Declaração e atribuição de variáveis:
    Neste documento você encontrará o conteúdo que precisa para aprender a declarar e utilizar variáveis na linguagem PHP. É por meio das variáveis que conseguimos guardar os dados em memória e acessá-los quando necessário.