Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera beleza?
Depois de muita batalha com o sistema do Fabyo e eu não ter conseguido fazer funcionar. Adaptei o sistema dele com os recursos de um que eu tinha que funcionava através de cookie.
Aproveitando para dar uma dica para diagramação/layout com include/require.
Vamos as pastas.
/
/template
/template/css
/template/flash
/template/img
/template/js
/galeria
Vamos as páginas.
index.php
<html><head><title>TITULO</title> <meta name="author" content="Floriano Comunicação Integrada - [http://www.floriano.ppg.br"](http://www.floriano.ppg.br) /> <link href="template/css/index.css" rel="stylesheet" type="text/css"></head><body><?php if ($login == "0") { echo "<p>$data</p> <p> </p>"; } else { echo "<p>$data</p> <p class='titulo_loginerro'>Login ou senha incorreto!</p>"; } ?><form name="login" method="post" action="aut.login.php"><p><input tabindex='1' name='USER_LOGIN' type='text' value='digite seu login' size='24' maxlength='12'><input tabindex='3' name='Entrar' type='submit'></p><p><input tabindex='2' name='USER_PWD' type='password' value='senha' size='23' maxlength='12'></p></body></html>
aut.login.php
<?php// Anti sql injectionfunction anti_injection($txt) { $txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt; return preg_replace("@(--|\#|\*|;|=)@s", "", $txt); }require_once('inc.conectdb.php');function verifica_usuario($USER_LOGIN, $USER_PWD) { $return_aut = mysql_query("select count(*) as total from tb_user where USER_LOGIN = '$USER_LOGIN' and USER_PWD = md5('$USER_PWD')"); setcookie("USER_LOGIN",$USER_LOGIN); setcookie("USER_PWD",$USER_PWD); $total = mysql_result($return_aut, 0, "total"); mysql_close(); if($total != 1) { header("Location: index.php?login=erro"); // Redirecionamento em caso de erro exit; }}$USER_LOGIN = isset($_POST["USER_LOGIN"]) ? anti_injection($_POST["USER_LOGIN"]) : "";$USER_PWD = isset($_POST["USER_PWD"]) ? anti_injection($_POST["USER_PWD"]) : "";verifica_usuario($USER_LOGIN, $USER_PWD);echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.autenticado.php'>"; // Redirecionamento em caso de sucesso?>
inc.php
<?require_once('aut.valida.php');require_once('inc.conectdb.php');?>
inc.conectdb.php
<?php// Conexão com o Banco de Dados$dbhost = "localhost";$dbname = "nomedobanco";$dbuser = "usuario";$dbpwd = "senha";$conect_db = mysql_connect($dbhost, $dbuser, $dbpwd) or die("Não foi possível conectar ao servidor"); mysql_select_db($dbname) or die("Não foi possível selecionar o banco de dados");?>
aut.valida.php
<?if(IsSet($_COOKIE["USER_LOGIN"])) $USER_LOGIN = $_COOKIE["USER_LOGIN"];if(IsSet($_COOKIE["USER_PWD"])) $USER_PWD = $_COOKIE["USER_PWD"]; require_once('inc.conectdb.php');function verifica_usuario($USER_LOGIN, $USER_PWD) { $return_aut = mysql_query("select count(*) as total from tb_user where USER_LOGIN = '$USER_LOGIN' and USER_PWD = md5('$USER_PWD')"); $total = mysql_result($return_aut, 0, "total"); if($total != 1) { echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro exit; }}verifica_usuario($USER_LOGIN, $USER_PWD);?>
index.autenticado.php
<!-- Layout Ini --><?php require_once('template/inc.layini.php'); ?> <!-- Fim Layout Ini --> <p>Funciono perfeito!</p><!-- Layout Fim --><?php require_once('template/inc.layfim.php'); ?><!-- Fim Layout Fim -->
template/inc.layini.php
<?php require_once('inc.php'); ?><html><head><title>TITULO</title> <link href="template/css/estilos.css" rel="stylesheet" type="text/css"> <?php include('inc.metas.php'); ?></head><body>
template/inc.layfim.php
</body></html>A dica que tentei deixar acima para o layout é:Fazer dois arquivos (layini e layfim) que contenham todas as informações que ficam em todas as páginas, bem como titulo, folha de estilo e etc, assim quando precisar apenas alterar o titulo do site você possa apenas alterar uma página. Sei que é bem comum esta utilização, mas como nem todo mundo sabe e dificilmente vejo dicas para pessoas realmente principiantes.
Bom eu não sei até que ponto este sistema é seguro, isto os moderadores/experts aqui poderiam nos dizer.
Abraços
o que tem de register globals ai?
na pagina inc.php eu tinho um include para:
config.php
<?php// Loginif(isset($_GET['login'])){ $login = $_GET['login']; } else { $login = 0; } // Data em português$semeng = date("l"); switch($semeng){case "Monday": $sem = "Segunda-Feira"; break; case "Tuesday": $sem = "Terça-Feira"; break; case "Wednesday": $sem = "Quarta-Feira"; break; case "Thursday": $sem = "Quinta-Feira"; break; case "Friday": $sem = "Sexta-Feira"; break; case "Saturday": $sem = "Sábado"; break; case "Sunday": $sem = "Domingo"; break; }$dia = (date("d"));$meseng = date("n"); switch($meseng) {case "1": $mes = "Janeiro"; break; case "2": $mes = "Fevereiro"; break; case "3": $mes = "Março"; break; case "4": $mes = "Abril"; break; case "5": $mes = "Maio"; break; case "6": $mes = "Junho"; break; case "7": $mes = "Julho"; break; case "8": $mes = "Agosto"; break; case "9": $mes = "Setembro"; break; case "10": $mes = "Outubro"; break;case "11": $mes = "Novembro"; break; case "12": $mes = "Dezembro"; break; } $ano = (date("Y"));$data = "$sem, $dia de $mes de $ano"; // colocar data no Banco de dados em Português $datadb_eng = date("Y-m-d"); $databg_br = substr($datadb_eng,8,2) . "/" .substr($datadb_eng,5,2) . "/" . substr($datadb_eng,0,4);?>ai funcionaria o IF com o $data e $login
geralmente eu fecho a conexão no layfim.php, assim eu não preciso fica toda hora abrindo e fechando a conexão a cada select...
meu register_globlas já estava em off e continua funcionando?!
é que voce postou sem o include deu a entender que voce nao tava usando nada para receber $login nem a $data, nao vou adivinhar que existe um include que voce nao mostrou
mas sobre o resto seu login continua confuso e a validação do usuario logado precisa melhorar
foi mau tinha esquecido de deleta...tem como alguem ai da uma geral, meus neuronios com isso estão meio que destruidos...abrçs
tmferreira da um help ai no aut.valida.php quebrando uma floresta, nem é um galho hehehevaleu pelas dicas acima, ja tinha visto aqui no forum mas nao tinha mudado no meus codigos de modelo... :D
Ricardo.RFS só você mudar ali na hora de testar se o usuario existe no banco você testa a $total se retornar você cria os coookie senao você nao cria, do jeito que você fez você ta criando antes de saber se ele existe
e no valida basta você testar se o cookie existe que ja é seguro e valido.
nao precisa toda vez que o usuario acessar uma pagina você acessar o banco e refazer a pesquisa.
perfeito Fabyo... e com relação ao register_globals? o que ta caracterizando que está ON?valeu mais uma vez
é valido eu fecha a conexão com o banco apenas no final da pagina?
aut.login.php
<?php// Anti sql injectionfunction anti_injection($txt) { $txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt; return preg_replace("@(--|\#|\*|;|=)@s", "", $txt); }require_once('inc.conectdb.php');function verifica_usuario($USER_LOGIN, $USER_PWD) { $return_aut = mysql_query("select count(*) as total from tb_user where USER_LOGIN = '$USER_LOGIN' and USER_PWD = md5('$USER_PWD')"); $total = mysql_result($return_aut, 0, "total"); if($total == 1) { setcookie("USER_LOGIN",$USER_LOGIN); setcookie("USER_PWD",$USER_PWD); } else { header("Location: index.php?login=erro"); // Redirecionamento em caso de erro exit; }}$USER_LOGIN = isset($_POST["USER_LOGIN"]) ? anti_injection($_POST["USER_LOGIN"]) : "";$USER_PWD = isset($_POST["USER_PWD"]) ? anti_injection($_POST["USER_PWD"]) : "";verifica_usuario($USER_LOGIN, $USER_PWD);/* Log------------------------------------------------------------------------------------*/$query = mysql_query("SELECT USER_ID FROM tb_user WHERE USER_LOGIN='$USER_LOGIN'");$result = mysql_fetch_array($query); $USER_ID = $result["USER_ID"];$LOG_DATA = date("Y-m-d H:i:s");$LOG_ACAO = "Logon";$LOG_IP = getenv("REMOTE_ADDR");$LOG_INSERT = "INSERT INTO tb_log (USER_ID, LOG_IP, LOG_ACAO, LOG_DATA) VALUES ('$USER_ID', '$LOG_IP', '$LOG_ACAO', '$LOG_DATA')";$LOG_INSERT = mysql_query($LOG_INSERT); /*------------------------------------------------------------------------------------*/mysql_close();echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.autenticado.php'>"; // Redirecionamento em caso de sucesso?>
aut.valida.php
<?if(IsSet($_COOKIE["USER_LOGIN"])){ $USER_LOGIN = $_COOKIE["USER_LOGIN"];} else { echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro exit;}if(IsSet($_COOKIE["USER_PWD"])){ $USER_PWD = $_COOKIE["USER_PWD"];} else { echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro exit;}?>
alterado o if do index para:
$msg = $login == "0" ? "> " : " class='titulo_loginerro'>Login ou senha incorreto!";echo "<p>$data</p>";echo "<p$msg</p>";ta ficando joia o negocio hehehe
valeu pela ajuda até agora!!!
se for para fechar a conexao no final da pagina nem precisa fechar pois o php ja fecha a conexao assim que o script é encerrado, mas o melhor para sites de muitas conexao simutanea é abrir e fechar só na hora que for usar.
e sobre o register_globals era só aquilo mesmo que voce nao tinha incluido o arquivo
entao usa o include de conexao varias vezes?isso nao deixa o site pesado?
esse anti inject eu copiei literalmente do que o fabyo tinha feito no sistema de login dele...
no log eu gravei o ID pq as vezes pode ocorre mudança no login, muito raro, mas...
esse negocio de bloqueio é uma ideia interessente, acho q vi aqui no forum alguma coisa quanto a bloqueio, vo ver se consigo adapta :P
nunca isei AND no IF, como funcionaria?
valeu tmferreira
Achei no google o AND hehehe
<?if(IsSet($_COOKIE["USER_LOGIN"]) || IsSet($_COOKIE["USER_PWD"])){ $USER_LOGIN = $_COOKIE["USER_LOGIN"]; $USER_PWD = $_COOKIE["USER_PWD"];} else { echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro exit;}?>
usei esta META pq o Header deixa na barra de endereços a página original, parecendo como um include e o meta ele literalmente redireciona o user a página indicada. :D
como faço pra faze um logoff no cookie quando o site for fechado e/ou atraves de link?
soh lembrando q se você usa || significa OU e para ser E, use &&
>
Achei no google o AND hehehe
<?if(IsSet($_COOKIE["USER_LOGIN"]) || IsSet($_COOKIE["USER_PWD"])){ $USER_LOGIN = $_COOKIE["USER_LOGIN"]; $USER_PWD = $_COOKIE["USER_PWD"];} else { echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro exit;}?>valeu magic! alterado!
vou dar uns toques que precisa mudar para melhorar a segurança e inclusive erros
index.php
nessa parte que esta assim ta errado:
elsenao existe $login e nem $data, entao ira dar erro nessa pagina.
outra coisa nao se testa dessa maneira voce precisa usar isset()
e voce precisa fazer uma validação melhor para saber se o usuario ta logado.
e parece que voce esta programando com register_globals = on isso deixa o sistema totalmente inseguro, o register_globals é para ficar em off
inc.conectdb.php
nessa pagina voce só esta incluindo ela, mas uma conexao com o banco voce tem que tratar com mais cuidado, e só abra a conexao na hora que for usar e feche em seguida.
aut.login.php
voce esta criando o cookie antes mesmo de saber se o usuario tem permissao
da uma revisao geral e trabalhe com :
registe_globals = off
display_errors = on
error_reporting = E_ALL