Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Exemplo simples de um sistema login usando session e protegido contra ataques sql injection
nivel iniciante
mas basicamente você precisa só colocar nas suas paginas o include "protecao.php"
index.php:
<?php
include "protecao.php";
?>
login.html:
<html>
<head>
<title>Sistema de Login</title>
</head>
<body>
<h1>Sistema de Login</h1>
<form action= "index.php" method="post" name="login" id="login"></a>
<label for="nome">Nome:</label>
<input type="text" name="nome" id="nome" />
<label for="senha">Senha:</label>
<input type="password" name="senha" id="senha" />
<input type="submit" name="submit" value="Entrar" style="cursor: pointer;" />
</form>
</body>
</html>
protecao.php:
<?php
session_start();
//função anti sql injection
function anti_injection($txt)
{
//Verifico se esta ativado magic_quotes caso esteja desativado uso a função addslashes
$txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt;
//referencia:
//http://www.php.net/get_magic_quotes_gpc
//http://www.php.net/addslashes
// retiro da variavel esses caracteres (--, #, *, ;)
return preg_replace("@(--|#|*|;|=)@s", "", $txt);
}
function verifica_usuario($nome, $senha)mysql_select_db("login");
/*faço uma pesquisa perguntando a quantidade de usuarios com o nome e a senha passada pelo usuario usando o count ele conta a quantidade de ocorrencias no select essa maneira é a forma mais rapida e correta desse tipo de pesquisa, muitas pessoas usam o select * from e pega com mysql_num_rows() dessa forma prejudica muito mais o acesso ao banco podendo travar se tiver muitos acessos simutaneos*/
$re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha =
md5('$senha')");
//referencia: http://www.php.net/md5 e http://www.php.net/mysql_result
$total = mysql_result($re, 0, "total");
mysql_close();
/ se o total for diferente de 1 é porque o usuario nao esta cadastrado usando dessa forma o resultado esperado sempre sera 1 porque você precisa tbm criar um sistema de cadastros que deixe apenas um usuario ser cadastrado evitando usuarios repetidos /
if($total != 1)
{
// redireciono para pagina de login
header("Location: login.html");
exit;
}$dados["nome"] = $nome;
$dados["senha"] = $senha;$_SESSION["dados"] = serialize($dados);
}
}
//verifico se existe a sessao e ja pego os dados que nela contem
if(isset($_SESSION["dados"]))
{
$dados = unserialize($_SESSION["dados"]);
$nome = $dados["nome"];
$senha = $dados["senha"];
verifica_usuario($nome, $senha);
}$nome = isset($_POST["nome"]) ? anti_injection($_POST["nome"]) : "";
$senha = isset($_POST["senha"]) ? anti_injection($_POST["senha"]) : "";
verifica_usuario($nome, $senha);
}
?>
</body>
</html>
principal.php:
<?php
// incluo a pagina de protecao que faz a verificação do usuario
include "protecao.php";
?>
pagina2.php:
<?php
include "protecao.php";
?>
banco de dados usado no exemplo:
ja tem o usuario Teste senha 123
obs: lembre-se na hora de gravar mais um usuario usar md5 na senha
CREATE TABLE usuarios (
id_usuario smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
nome varchar(40) NOT NULL DEFAULT '',
senha varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (id_usuario)
)
INSERT INTO usuarios VALUES >(1, 'Teste', '202cb962ac59075b964b07152d234b70');
pessoal esta muito simples e funcional, mas se tiverem duvidas postem ai que eu respondo
opa pode usar a vontade
VaLeWs!!!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
http://forum.imasters.com.br/public/style_emoticons/default/cry.gif
Fabyo, estou tentando usar seu sistema de login e ocorreu os seguintes erros.
Primeiro:
Ocorre quando eu erro a senha na linha 25 que é o comando ( header("Location: teste.htm") ;)
Warning: Cannot modify header information - headers already sent by (output started at c:\windows\serv-n\www\paginas\senha\protecao.php:9) in c:\windows\serv-n\www\paginas\senha\protecao.php on line 25
Substitui pelo comando (include "login.html" ;) Não sei se é a mesma coisa, mas funcionou.
Segundo:
Bom funcionando com o comando (include "login.html" ;) , quando eu vou para a pagina2, volta para o login, e eu não consigo de forma alguam logar novamente.
Terceiro:
Inclui uma pagina3, porem como eu disse anteriormente, quando eu estou na pagina principal e tento ir para pagina2 eu volto para o login.
Você poderia ver o que acontece?
esse erro é porque nao pode ter nenhuma saida html antes do header se tiver use ob_start() no inicio da pagina e deixa o header
o include inclue é bem diferente de um header
www.php.net/header
www.php.net/include
Estou usando esse esquema,ocorre que vou pra pra pagina Principal.php ou outras no meu caso como festa.php, noticias.php estou sempre chamando o protecao.php no inicio de cada pagina, porém tem uma hora que ele se perde, não entendo o porque, eu dou echo $login= $_POST['$login']; echo $senha= $_POST['$senha'];e ele reclama dizendo que não está vindo nada na variável.Gostaria se saber se eu tenho que passar mais algum parametro no protecao.php ou nas outras páginas, pra estar recebendo e passando esses dados a partir do momento que passou pela protecao.php Obrigado,Robson Veneruchirveneruchi@hotmail.com
ta errado isso
echo $login= $_POST['**$**login'];
echo $senha= $_POST['**$**senha'];Fabyo,eu utilizei o comando echo; para mostrar o conteúdo das variáveis, estive debugando minhas paginas e quando eu comentei o trecho, funcionou.else{$nome = isset($_POST["nome"]) ? anti_injection($_POST["nome"]) : "";$senha = isset($_POST["senha"]) ? anti_injection($_POST["senha"]) : "";verifica_usuario($nome, $senha);}agora não consigo identificar aonde está exatamente o erro pois volta pra página de login.Valeu pela força,Robson Veneruchi
No ''proteção.php'' deve inserir o código citado, no caso seria o que contém o código de proteção anti SQL injection.
Fabyo, eu já tenho um sistema de login, mas preciso usar session nele e adicionar o script de sql anti_injection, teria como você comentar seu código para eu ver o que preciso e utilizar?
pronto comentei e ve se ajuda
eu to pra postar uns exemplos novos de login falta tempo = )
To com um probleminha heheEle nao entra no login, eu coloco o login teste e a senha 123 e ele volta a tela de login, provavelmente porque nao autenticou a senha.. mas eu já adicionei o usuario com id=1 nome=teste senha=123você sabe uq pode estar errado?
você tem que usar um campo para senha com tamanho de 32
e gravar a senha com md5 porque no select ele ta buscando uma senha com md5
você tem que usar um campo para senha com tamanho de 32e gravar a senha com md5 porque no select ele ta buscando uma senha com md5
Certinho, valeu mesmo.
Eu tenho que fazer um sistema de cadastro de usuarios que grave no banco em md5 certo?
certo
Olá fabio, sou eu aqui denovo te enchendo o saco hahaÉ que eu estou precisando fazer níveis com o meu sistema de logins. Sendo assim gostaria que você me disesse onde posso fazer a verificação para saber que nivel o usuario é.Porque como esse sistema de login é com include nas paginas, eu teria que verificar no proteção em que nivel este usuario está. Mas nao sei como, pode me dar uma luz?
crie uma tabela de grupos por exemplo admin, usuario, etc...
e na tabela usuarios coloca um fk_grupo pra relacionar com essa tabela grupos dai só fazer o select e pegar de qual grupo o usuario faz parte
Ok mais eu faço o select dentro do protecao.php?
você pode fazer o select na hora que ta validando o usuario
Muito bom script de login...Mas você me consegue um script de logout?vlw.flw.Obs:Espero nao estar te abusando fabyo...
as session ja sao apagadas assim que fecha o navegador entao nao precisa de logout
mas se quiser usar um sistema assim, use com cookies
o meu problema é exatamente o mesmo.fica voltando pra tela de login.Alguém conseguiu fazer funcionar?
Pois é...Pra entrar tá funcionando beleza...Até consigo ir pra uma página adiante, mas qdo volto pra página anterior, cai no login e só fechando o browser pra logar de novo.
onde eu coloco a pagina de redirecionamento? tipo assim....Se o login deu certo, para index2.php . Se deu errado, vá para falha.php
Hum..... para usar esse script no SQL 2000.... e so mudar as tags né? de mysql para mssql?Ha... alguem ai sabe.... algum link de tutorial... sobre integracao php+sql 2000? =(
Muitoo loucoo..... 100%Agora quero saber do Fabyo se podemos utilizar 0 exemplo para nossos sistemas do dia dia.. rsrs