» Início » Programação » PHP » Login com Sessions
 
Avaliação: | Publicado em: 11/12/2007
Login com Sessions
Oberaldo Bull Programador PHP/MySql, trabalho no desenvolvimento de sites e sistemas dinâmicos. Faço parte da EquipeXQ de programadores, administro o site nacional do framework CakePHP (www.cakephp.com.br).


Olá Pessoal!
Neste tutorial mostrarei como criar um sistema de autenticação simples, usado para proteger áreas restritas em sites.

Primeiro, vamos criar a base de dados:

CREATE TABLE `login` (
  `id` int(11) NOT NULL auto_increment,
  `login` varchar(12) NOT NULL,
  `senha` varchar(60) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `login` (`id`, `login`, `senha`) VALUES
(1, 'admin', '123456');

Vamos criar o arquivo de conexão:

<?php
$host = "localhost";
$user = "usuariodb";
$pass = "senhadb";
$base = "plugmasters";
$con = mysql_connect($host, $user, $pass);
$banco = mysql_select_db($base);
$tbl_login = "login";
?>

Agora, vamos criar o form de login:


//salve como index.php
<fieldset style="width: 25%;">
<legend>Login</legend>
<form method="POST" action="login.php">
<p>Usuário: <input type="text" name="login" size="20"></p>
<p>Senha: <input type="password" name="senha" size="20"></p>
<input type="submit" name="submit" value="Entrar">
</form>
</fieldset>

Agora, a página que verifica se o login existe:

// salve como login.php
<?php
include("config.php");// arquivo de conexão com banco de dados

// selecionar dados da tabela
$query = "SELECT * FROM $tbl_login WHERE login='$login' AND senha='$senha'";
$res = mysql_query($query);
$row = mysql_num_rows($res);
// verificar se existe o login e senha
if($row == 0){
    echo "Login ou senha incorretos!<br />";
    echo "Clique <a href='index.php'>AQUI</a> para voltar e tentar novamente.";
}
else{
    // se estiver tudo OK, registra sessão de login
    session_start("login");
    session_name();
    session_destroy();
    session_register("login", "senha");
    header("Location:index2.php");
    exit;
}
?>

Agora, criaremos o arquivo responsável por verificar se o usuário está autenticado:

// salve como verifica.php
<?php
session_start("login");
if(!(session_is_registered("login") AND session_is_registered("senha"))){
    header("Location:index.php");
    exit;
}
$login = $_SESSION['login'];
$senha = $_SESSION['senha'];
?>

Para proteger suas páginas, faça o seguinte:

<?php
include("verifica.php");
echo "Olá ".$_SESSION['login'].", você está autenticado!";
?>
<br /><br />
<a href="logout.php">Sair</a>

Para efetuar o logout, faça o seguinte:

// salve como logout.php
<?php
session_start();
unset($_SESSION['login']);
header("Location:index.php");
?>

Tiago Hillebrandt <tiagoscd@yahoo.com.br>
Show cara, porém achei que faltou segurança, pois está totalmente vulnerável a SQL Injection.

Outra coisa que notei, é que você utilizou alguns métodos deprecated, como o session_is_registered(), que os programadores PHP são altamente desencorajados a utilizá-los, porque eles podem cair fora do pacote do PHP a qualquer hora, sem contar que eles estão sem serem atualizados por um bom tempo, heheehh.

Mas parabéns pelo artigo, muito bom para iniciantes =)

Abraço
Ola queria falar uma coisa no arquivo login.php

Não esta precisando resgastar o valor do index.php

login= _POST"login";
senha= _POST"senha";
JESSE SANTANA <j_b_santana@hotmail.com>
GOSTEI DO ARTIGO. PARABÉNS. AGORA TERIA COMO COM O MESMO FORMULÁRIO DE LOGIN FAZER UMA PESQUISA NA BD MYSQL ONDE MOSTRARIA SÓ OS REGISTROS COM O NOME DO USUÁRIO QUE LOGOU? TENTEI FAZER MAS NÃO FUNCIONOU PQ O ACTION É POST E PARA PESQUISA ELE PRECISA SER GET... ABRAÇOS JESSE SANTANA
ai ja invadi varios sites com sql injection

e a falha que nos mas usamos depois da via ftp

que nesse site e vulneravel

a porta 21 desse site a ftp esta aberta para mim
Edvaldo P. Jatobá <edvaldopj@hotmail.com>
Olá,
Gostei do login,
É possivel criar um login tipo chave xxx.xxx.xxx que é valido por 30 minutos, 1 hora e 24 horas ?
Tipo libera internet e depois deste tempo ele faz o bloqueio..
Muito obrigado !!
Cara não sei oque esta acontecendo mais quando eu mando para internter o session ele não loga!!
Carlos Silva <carlos.silva@gfmi.com.br>
Muito bom, pra vcs terem uma ideia, coloquei este sistema de login em um wap.
João Carvalho <joaovilcarvalho@hotmail.com>
Sou um iniciante a tender para o medio, GOSTEI! Simplesmente me esta a dar um erro, e nao consigo percerber o porquê,o erro é o seguinte:

"Warning: Cannot send session cache limiter - headers already sent (output started at c:apachehtdocsex1papbackofficetste do sistema de loginsindex2.php:10) in c:apachehtdocsex1papbackofficetste do sistema de loginsverifica.php on line 2"

PORQUE SERÁ? ALQUEM ME AJUDE POR FAVORR!
ate
Obrigadao