Neste tutorial mostrarei como fazer um simples sistema de login de usuário, utilizando sessões, e com consultas ao banco de dados.
Dando continuiade aos tutorias de PHP, vou mostrar agora como criar um sistema de login de usuário, conectando com o banco de dados MySQL, e gravando os dados em Sessões.
Primeiramente, você deverá ter um servidor com suporte PHP instalado em seu computador, ou então alguma hospedagem, para testar a aplicação. Se desejar instalar um servidor e não souber como, leia o tutorial de instalação do EasyPHP que escrevi a alguns meses.
Vamos começar!
Primeiramente, crie o banco de dados. No nosso caso escolhi o nome “tutoriais”, pois irei utilizá-lo em outros artigos.
Depois que o banco estiver criado, o próximo passo é criar a tabela de usuarios.
CREATE TABLE IF NOT EXISTS `usuario` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
`login` varchar(255) NOT NULL,
`senha` varchar(255) NOT NULL,
PRIMARY KEY (`id`));
Com a tabela criada, vamos agora povoá-la:
INSERT INTO `usuario` (`id`, `nome`, `login`, `senha`) VALUES (1, 'Arthur Sorriso', 'sorriso', '698dc19d489c4e4db73e28a713eab07b');
O campo senha, está encriptado no formato MD5, para uma melhor segurança. Aqui ela significa apenas “teste”.
Agora, o próximo passo é criar o formulário de login.
form_login.php
<strong>Sistema de Login</strong>
<form action="autenticar.php" method="post">
Login: <input name="login" type="text" />
Senha: <input name="senha" type="password" />
<input type="submit" value="Acessar" /></form>
Explicando o código:
A primeira linha é apenas um título, para ficar organizado. Nada de mais.
Na segunda começamos a criar o formulário. Utilizamos a tag form. O parâmetro action informa o destino que a página vai quando o botão “Acessar” é presionado. O parâmetro “method” pode ser “get” ou “post”. Para este utilizaremos “post” por ser mais seguro. No “get”, os dados do formulário serão enviados via endereço no browser, o que não queremos.
Na terceira linha criaremos o campo para o usuário digitar o login. Para isso utilizamos a tag “input” com tipo texto.
Na quarta linha criaremos o campo para senha. É análogo ao campo de login, a única diferença é o tipo, que agora passa a ser “password” de forma que quando o usuário digitar algo, isto aparecerar como asterisco(*).
Na quinta linha criaremos o botão para submeter o nosso formulário. Para isso utilizamos a tag “input” com tipo “submit”. E depois fechamos o formulário.
Vamos agora criar a página que fará a conexão com o nosso banco de dados.
connect.php
<?php
$host = "localhost";
$user = "root";
$password = "";
$dbname = "tutoriais";
mysql_connect($host, $user, $password) or die("Erro ao tentar se conectar!");
mysql_select_db($dbname)or die("Erro ao selecionar o banco!");
?>
Explicando o código:
Primeiramente pegamos as variáveis necessárias para a conexão no banco de dados. A primeira é o host para conectar. Na maioria dos casos será localhost mesmo. Depois usuário e senha do banco de dados. E por último o banco de dados que será utilizado. Como falei lá em cima, o banco que utilizarei é o tutoriais.
Depois criaremos a nossa conexão. Para isso utilizaremos a função mysql_connect e passaremos como parâmetros as variáveis de cima. Caso ocorra um erro, será mostrada a mensagem escrita dentro do die().
Por fim fazemos a seleção do banco de dados que iremos utilizar.
Simples.
Agora vamos para a parte mais complicada, mas não difícil, do tutorial. A página que será responsável pela autenticação do usuário, criando assim sua sessão.
autenticar.php
<?php
include("connect.php"); //Recebendo os dados do formulário
$login = addslashes($_POST["login"]);
$senha = md5(addslashes($_POST["senha"])); $sql = "SELECT * FROM usuario WHERE login = '$login' AND senha = '$senha'";
$rs = mysql_query($sql); if(mysql_num_rows($rs) == 1) {
$user = mysql_fetch_array($rs);
//conferindo o login e senha para segurança
if($login == $user['login']){
//se entrou, entao o login é igual
if($senha == $user['senha']){
//se entrou, então a senha também é igual
$logado = "1";
$id_user = $user['id']; //criando a sessão
session_start();
$_SESSION["id_user"] = $id_user;
$_SESSION["logado"] = $logado; //depois que criarmos a sessão,
//vamos redirecionar para a página privada
header("Location: cadastro.php");
} else {
echo "A senha não confere!"; }
} else {
echo "O usuário não confere!";
}
}else {
echo "Usuário ou senha inválidos. Tente novamente.";
}
?>
Explicando o código:
Primeiramente incluimos o arquivo connect.php, a fim de estabelecermos a conexão com o banco de dados.
//Recebendo os dados do formulário
$login = addslashes($_POST["login"]);
$senha = md5(addslashes($_POST["senha"]));
Depois iremos receber as variáveis passadas pelo formulário. A função addslashes() serve para tratarmos nossas Strings recebidas, afim de evitar qualquer ataque de Sql Injection. Ela funciona da seguinte forma: sempre que encontrar qualquer aspa simples (’) ou dupla (”), ele adiciona uma barra invertida antes dela, ficando por exemplo \’. Uma das formas de invasão de sites mais simples é esta, digitando por exemplo ‘or 1=1 –. Esta é uma forma de se evitar. Continuando, a função md5() serve para encriptar a senha, já que a do banco está encriptada, a que se passa no formulário deverá também o ser, para comparamos.
Na próxima criamos uma variável para receber nossa string sql. Ela seleciona tudo (*) da tabela usuario, onde o login for igual ao da variável e a senha também. Simples.
Na próxima linha executamos o sql.
$sql = "SELECT * FROM usuario WHERE login = '$login' AND senha = '$senha'";
$rs = mysql_query($sql);
if(mysql_num_rows($rs) == 1) {
A seguir, testamos se o comando retornou alguma linha na consulta. Se não, o usuário e a senha poderá ter sido escrito errado, ou até mesmo não existir.
Se a consulta estiver correta, entraremos no nosso if.
$user = mysql_fetch_array($rs);
//conferindo o login e senha para segurança
if($login == $user['login']){
//se entrou, entao o login é igual
if($senha == $user['senha']){
A primeira linha dentro do if cria um array na variável $user com os dados coletados no banco de dados.
A seguir, conferimos se o conteúdo da variável é igual ao conteúdo vindo pelo formulário, evitando assim também alguma invasão.
Depois de conferidos o usuário e a senha, iremos ao próximo trecho:
//se entrou, então a senha também é igual
$logado = "1";
$id_user = $user['id'];
//criando a sessão
session_start();
$_SESSION["id_user"] = $id_user;
$_SESSION["logado"] = $logado;
//depois que criarmos a sessão, vamos redirecionar para a página privada
header("Location: cadastro.php");
Primeiramente atribuimos o valor 1 à variável $logado, já que o usuário escreveu tudo corretamente, e depois guardamos o id do usuário no banco na variável $id_user.
Agora podemos criar nossa sessão inicializando ela primeiramente, e depois criando suas variáveis.
A seguir, redirecionamos à página que queremos que os usuários logados acessem.
As próximas linhas são apenas fechamentos dos ifs e tratamentos de erros, com os elses.
Agora iremos para a nossa página privada, que só poderá ter seu conteúdo visto se o usuário estiver logado.
cadastro.php
<?php
//Iniciando a sessão
session_start();
include("connect.php");
if($_SESSION['logado'] == 1){
$sql = "SELECT * FROM usuario WHERE id = ".$_SESSION['id_user'];
$rs = mysql_query($sql);
if(mysql_num_rows($rs)) {
$user = mysql_fetch_array($rs);
echo "<strong> Olá ".$user['nome']."!</strong> ";
echo "<a href="logout.php">Sair</a>";
echo "Esta é sua página privada.
Nos próximos tutoriais continuaremos com esta página.";
}
}else {
echo "Você não está logado. Tudo está oculto para você!";
}
?>
Explicando o código:
session_start();
include("connect.php");
if($_SESSION['logado'] == 1){
Nas primeiras linhas iniciamos a nossa sessão, e incluímos o arquivo de conexão com o banco. A seguir testamos se usuário está realmente logado, vendo se o conteúdo da variável de sessão $_SESSION['logado'] é igual a 1, conforme definimos no arquivo autenticar.php.
$sql = "SELECT * FROM usuario WHERE id = ".$_SESSION['id_user'];
$rs = mysql_query($sql);
if(mysql_num_rows($rs)) {
$user = mysql_fetch_array($rs);
echo "<strong> Olá ".$user['nome']."!</strong> ";
echo "<a href="logout.php">Sair</a>";
echo "Esta é sua página privada.
Nos próximos tutoriais continuaremos com esta página.";
}
Agora escrevemos o nosso conteúdo oculto a não logados. Aqui fiz apenas uma simples consulta para pegar o nome do usuário, e exibí-lo nas boas vindas. Em seguida, apresentei o link para o usuário se deslogar do sistema.
O restante do código é apenas fechamento de if, e um else para os usuários não logados.
Por fim, a página de logout.
logout.php
<?php
//Iniciando a sessão
session_start();
//destruindo a sessão
session_destroy(); Header("Location: form_login.php");
?>
Nela nós destruimos a sessão, e redirecionamos para a página de login.
No próximo tutorial, irei abordar a parte de inserção no banco de dados. Pretendo fazê-lo como uma continuação deste, modificando nossa página cadastro.php, a fim de cadastrar novos usuários.
Bom por hoje é só. Espero ter sido claro no tutorial.
Se tiverem dúvidas é só perguntar nos comentários.
Arquivos do artigo para download
Font: http://www.arthursorriso.com.br/index.php/tutorial-php-sistema-de-login-utilizando-sessoes/