Fabyo 66 Denunciar post Postado Setembro 22, 2005 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) { //conecto ao servidor de banco de dados passo o nome do servidor usuario e senha mysql_connect("localhost", "usuario", "senha"); // seleciono o banco de dados 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; } // se nao existir ja a sessao eu gravo ela if(!isset($_SESSION["dados"])) { $dados["nome"] = $nome; $dados["senha"] = $senha; //gravo a sessao por padrao o php hj ja passa o serialize automaticamente nao precisa mais passar ela $_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); } else { //aqui eu verifico se o usuario esta vindo de um formulario e pego os valores $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 Compartilhar este post Link para o post Compartilhar em outros sites
Alexandre Rangel 1 Denunciar post Postado Setembro 23, 2005 Muitoo loucoo..... 100%Agora quero saber do Fabyo se podemos utilizar 0 exemplo para nossos sistemas do dia dia.. rsrs Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 23, 2005 opa pode usar a vontade Compartilhar este post Link para o post Compartilhar em outros sites
Alexandre Rangel 1 Denunciar post Postado Setembro 23, 2005 VaLeWs!!!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Abimael 0 Denunciar post Postado Novembro 30, 2005 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? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 30, 2005 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 Compartilhar este post Link para o post Compartilhar em outros sites
rveneruchi 0 Denunciar post Postado Dezembro 7, 2005 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 Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 7, 2005 ta errado isso echo $login= $_POST['$login']; echo $senha= $_POST['$senha']; Compartilhar este post Link para o post Compartilhar em outros sites
rveneruchi 0 Denunciar post Postado Dezembro 8, 2005 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 Compartilhar este post Link para o post Compartilhar em outros sites
N©xlife 0 Denunciar post Postado Dezembro 9, 2005 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. Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 5, 2006 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? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 5, 2006 pronto comentei e ve se ajuda eu to pra postar uns exemplos novos de login falta tempo = ) Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 9, 2006 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? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 9, 2006 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 Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 9, 2006 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 md5Certinho, valeu mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 9, 2006 Eu tenho que fazer um sistema de cadastro de usuarios que grave no banco em md5 certo? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 9, 2006 certo Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 26, 2006 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? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 26, 2006 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 Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 26, 2006 Ok mais eu faço o select dentro do protecao.php? Compartilhar este post Link para o post Compartilhar em outros sites