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.
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.
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>
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');
}
?>
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>
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
- Manual do PHP:
Site oficial do PHP - MYSQL:
Site Oficial do Mysql - PHP no Wikipedia:
Mais informações sobre o Wikipedia
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.