Conheça o Plugfeed | » Início » Programação » PHP » Login com Sessions
Conheça o Plugfeed | » Início » Programação » PHP » Login com Sessions -->
 
Avaliação: | Publicado em: 12/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).


Login com Sessions

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
Bom amigo , so tem umas coisinhas , no arquivo PHP tem que ser resgatado o valor do login e da senha , caso o register_globals do PHP.ini estiver como off ( comum hoje em dia ) , caso estiver como On pode deichar assim ( quem quiser resgatar o valor é simples ( login = _POST'login '; e senha
senha = _POST'senha ' ) ) , outra coisa a principio o sitema esta vulneravel a injeção de sql , não analisei completamente , mas a primeira vista esta vulneravel . vlw por compartilhar .