programax 0 Denunciar post Postado Dezembro 14, 2010 Ola pessoal !! Bom Dia galera!!! andei pesquisando como eu posso proteger meu sistema.. e fiz um login e senha usando sessions na pagina seguinte eu ja criei a tabela no banco chamada "login" com os campos:id_login, login e senha... VALUES(douglas e speed).... tenho meu <form> de login e senha q esta td ok...e no action="login.php" q e a pagina seguinte q da erro.. <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.php");// arquivo de conexão com banco de dados $login = $_POST['login']; $senha = $_POST['senha']; $sql = "SELECT * FROM login WHERE login='$login' AND senha='$senha'";//erro nessa linnha. $res = mysql_query($sql) or exit(mysql_error()); $row = mysql_num_rows($res) or exit(mysql_error()); // 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 { // registra sessão de login. session_start("login"); session_name(); session_destroy(); session_register("login", "senha"); header("Location:pg_admin.php"); exit; } ?> o erro q aprece e: Parse error: parse error, unexpected '<' in C:\Arquivos de programas\EasyPHP 2.0b1\www\ISSEC\pg_admin.php on line 16 alguem sabe oq poder ser? eu to usando o MYSQL!! Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Dezembro 14, 2010 Coloque o cód. do formulário e o cód. do arquivo conexao.php Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 14, 2010 <html> <head> <title>ISSEC</title> <link rel="stylesheet" type="text/css" href="css.css"/> </head> <body bgcolor="silver"> <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.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="submi" value="Entrar"> </form> </fieldset> </body> </html> arquivo de conexao.php <?php $host="localhost"; $usuario="root"; $senha=""; $banco= mysql_connect($host,$usuario,$senha) or die("Nao foi possivel conectar o servidor "); $dada=mysql_select_db("banco", $banco) or die ("Nao foi possivel selecionar o Banco"); ?> pronto! Coloque o cód. do formulário e o cód. do arquivo conexao.php cara eu ja achei o erro q estava dando no SELECT ... MAS no <form> de login e senha eu colocar um nome e uma senha q ñ existe na tabela de login... ñ aparece essa mensagem if($row == 0) { echo "Login ou senha incorretos!<br />"; echo "Clique <a href=\"index.php\">AQUI</a> para voltar e tentar novamente."; } else mas se eu digitar o login e senha correto eu cosigo entra na pagina pg_admin.php else { // registra sessão de login. session_start(); session_name(); session_destroy(); session_register("login", "senha"); header("Location:pg_admin.php"); exit; } ... na pagina de pg_admin.php da um error na SESSION: <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.php"); include("verifica.php"); echo "Olá ".$_SESSION['login'].", você está autenticado!";//ERRO NESSA LINHA!! ?> o eerro q aparece e: Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP 2.0b1\www\ISSEC\pg_admin.php on line 14 Olá , você está autenticado! Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Dezembro 14, 2010 session_start(); session_destroy() ??? Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 14, 2010 session_start(); e para inicia a sessao de 'login'.. Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Dezembro 14, 2010 isso com certeza .... mas porque tu acaba com ela logo em seguida? Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 14, 2010 ca eu ñ sei bem o pq desse: session_destroy() se me lebro bem..meu prof disse q sao como parametros para a sessao ser registrada no banco! opa achei o erro.. agora so esta dando erro na SESSION: <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.php"); include("verifica.php"); echo "Olá ".$_SESSION['login'].", você está autenticado!"; ?> o movivo de ñ aparecer essa mensagem era o "or exit(mysql_error())" $res = mysql_query($sql) ; $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 aguem sabe o motivo desse erro! <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.php"); include("verifica.php"); echo "Olá ".$_SESSION['login'].", você está autenticado!";// erro nessa linha... ?> em vez desse erro era para aprecer meu nome de login!! Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 21 Olá , você está autenticado! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 14, 2010 Leia tutoriais sobre session Você não está usando session_start(). Sem isso, $_SESSION não existe mesmo. session_destroy() é para destruir a sessão (apagar os cookies dela e os dados no servidor), como o próprio nome diz. Não tem nada a ver com banco de dados Compartilhar este post Link para o post Compartilhar em outros sites
jcalebe 0 Denunciar post Postado Dezembro 14, 2010 E é bom usar um script anti-sql injetion: http://forum.imasters.com.br/index.php?/topic/417752-como-evitar-sql-injection //Conexão do mysql aqui function anti_injection($str){ if (!is_numeric($str)) { $str = get_magic_quotes_gpc() ? stripslashes($str) : $str; $str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str); } return $str; } $login = @anti_injection(@$_POST['login']); $senha = @anti_injection(@$_POST['senha']); if ((@preg_match('/\\\/', $login)) || (@preg_match('/\\\/', $senha))) exit('Houve um erro na sua consulta.'); //Acho que tá certo agora $sql = "SELECT * FROM login WHERE (login LIKE '$login' AND senha LIKE '$senha')"; E também não entendo o motivo de você destruir a sessão logo após criá-la. Essa parte de destruir sessão deve estar em um arquivo de logout. Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 15, 2010 sim tb tem um arquivo de LOGAUT <?php // isso aqui e para sair include("conexao.php"); session_start(); unset($_SESSION['login']); header("Location:index.php"); ?> cara mas ñ pecisa usar injection agora.. ou precisa? Compartilhar este post Link para o post Compartilhar em outros sites
jcalebe 0 Denunciar post Postado Dezembro 15, 2010 cara mas ñ pecisa usar injection agora.. ou precisa? Não precisa agora, mas já seria interessante você implementar tudo de que vai precisar, para depois não ter que fazer alterações difíceis. Que eu saiba, o session destroy deve ficar na página de logout, e não na página de login. Porque ele está lá? Compartilhar este post Link para o post Compartilhar em outros sites
RDP 0 Denunciar post Postado Dezembro 15, 2010 <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.php");// arquivo de conexão com // recuperando dados do form $login = trim($_POST["login"]); $senha = trim($_POST["senha"]); // buscando no DB os dados conforme digitado no form $sql = "SELECT * FROM login WHERE login = '$login' AND senha = '$senha'"; $res = mysql_query($sql); if (mysql_num_rows($res)<= 0) // verificando se foi encontrado dados { echo "Login ou senha incorretos!<br />"; echo "Clique <a href=index.php >AQUI</a> para voltar e tentar novamente."; exit; } else { session_start(); // iniciando a sessao $_SESSION = mysql_fetch_array($res); // guardando dados na sessao header("Location:pg_admin.php"); } ?> Use o trim() para retirar os espaços em branco. Também é aconselhavel armazenar a senha no BD criptografada para isso pode usar o md5() espero que ajude depois posta o resulatdo ai flw e para o logout <?php session_start(); session_unset(); session_destroy(); header('Location: index.php'); ?> flw Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 15, 2010 fiz da mesma forma q você disse mas ficou do mesmo jeito.. o problema e q ñ esta registrando o login e senha tipo na pg_admin.php eu dei um Echo para ver o login logando... os cogigos estao assim: e olha os comentarios... <?php ini_set('display_errors', true); error_reporting(E_ALL); include("conexao.php");// arquivo de conexão com banco de dados $login = trim($_POST["login"]); $senha = trim($_POST["senha"]); $sql = "SELECT * FROM login WHERE login='$login' AND senha='$senha'";//erro nessa linnha. $res = mysql_query($sql) or exit (mysql_error()) ; // verificar se existe o login e senha if(mysql_num_rows($res)<= 0) { //ate aki funciona esse mensagem e mostrada echo "Login ou senha incorretos!<br />"; echo "Clique <a href=\"index.php\">AQUI</a> para voltar e tentar novamente."; exit; } else { // registra sessão de login. session_start();// a sessao de para iniciar ñ funciona ñ sei o pq? //obs.. $_SESSION = mysql_fetch_array($res); header("Location:pg_admin.php"); exit; } ?> pagina depois do login e senha pg_admin.php <a href="logout.php">Sair</a> <DIV id="tudo"> <div id="topo"> <div id="topo"> <h6>ISSEC</h6> <?php include("conexao.php"); include("verifica.php"); echo "Olá ".$_SESSION['login'].", você está autenticado!";//erro nessa linha ñ aparece o nome de login.. ?> </div> <div id="menu"> <td> <tr><a href="?link=1">Home</a></tr> //ETCCCCCCCCCCCCCCCC pagina para cerifica se o usuario esta autentico.. <?php// arquivo para verificar se o usuario esta autentico.. include("conexao.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']; ?> e aki o LOGOUT <?php // isso aqui e para sair include("conexao.php"); session_start(); session_unset(); session_destroy(); header('Location: index.php'); ?> cara mas ñ pecisa usar injection agora.. ou precisa? Não precisa agora, mas já seria interessante você implementar tudo de que vai precisar, para depois não ter que fazer alterações difíceis. Que eu saiba, o session destroy deve ficar na página de logout, e não na página de login. Porque ele está lá? ERRO de codificação mas ja consertei!! Compartilhar este post Link para o post Compartilhar em outros sites
RDP 0 Denunciar post Postado Dezembro 15, 2010 Na pagina pg_admin.php não aparece o nome do useruario pq você não iniciou a sessao no inicio da pagina coloque <?php session_start(); ?> na página de logout não é necessário incluir o banco de dados, pois nela não será feito nada(consulta, insert, ...) com o Banco flw Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 15, 2010 ham e mesmo e .. mas ainda ñ apareceu meu nome de Login.. echo "Olá ".$_SESSION['login'].", você está autenticado!"; session_start(); vai iniciar id_login..na pagina? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 15, 2010 Leia sobre session_is_registered: http://php.net/manual/en/function.session-is-registered.php O manual aconselha a não usar. Ela depedne da diretiva register_globals. Prefira usar isset() Você usa session_start() em verifica.php. Logo, não precisa dela de novo em pg_admin.php, já que você faz include de verifica.php Dê um print_r() em $_SESSOIN depois do session_start. Isso mostrará todos os valores do array Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 15, 2010 si tem um login e senha.. fiz isso e apareceu: Olá Array, você está autenticado! echo "Olá ".$_SESSION.", você está autenticado!"; fiz aasim e apareceu o -id- do login 01 echo "Olá ".session_start().", você está autenticado!"; e com o mesmo erro de sempre! Notice: A session had already been started - ignoring session_start() in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 22 Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 15, 2010 não é para dar ehco em $_SESSION. É para usr print_R echo "<pre>"; print_r( $_SESSION ); echo "</pre>"; O erro apenas diz o que comentei antes: já usou session_start em verifica.php. Como você faz o include desse arquivo, não use session_start de novo em pg_admin.php Compartilhar este post Link para o post Compartilhar em outros sites
programax 0 Denunciar post Postado Dezembro 15, 2010 O erro apenas diz o que comentei antes: já usou session_start em verifica.php. Como você faz o include desse arquivo, não use session_start de novo em pg_admin.php esssa parte eu entendi!! mas print_r e para mudar o formato da letra.. <?php include("conexao.php"); include("verifica.php"); echo "<pre>"; print_r( $_SESSION ); echo "</pre>"; ?> da erro da meesma forma!! Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 22 cara eu acho q tem alguma coisa errada na pagina de verifica.php pq se eu for na barra de endereço e colocar.. pg_admin.php eu consigo entrar... e isso ñ deveria acontecer pq eu coloquei o include("verifica.php"); na pagina admin.php ? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 15, 2010 um dos problemas é session_is_registered(). Troque por isset() outra coisa: não pode haver saída ao navegador antes de hader(), setcookie() ou session_start(). Coloque o session_start() (ou o include do verifica.php) antes de qualquer HTML ou echo. O print_r não é para mudar fonte: http://br.php.net/print_r Nesse caso a fuinção mostrará o conteúdo completo do array $_SESSION Compartilhar este post Link para o post Compartilhar em outros sites