Criando sessão para login no PHP

Veja neste artigo como utilizar sessões no PHP para tratar o login de usuários em um sistema web, garantindo a segurança do acesso aos dados da aplicação.

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.

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:

com os seguintes campos:

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.

Artigos relacionados