Diogo Freitas Postado Junho 5, 2008 Denunciar Share Postado Junho 5, 2008 boas tardes,resolvi criar um sistema de login com session e não utilizar cookies.está td bom. porém, o mesmo colocando include "valida_session.php" nas páginas secretas ele não obdece, ou seja, qualquer um pode entrar?será que é por utilizar id?os códigos...valida session<?php session_start(); if(isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) { $login_usuario = $_SESSION["login_usuario"]; $senha_usuario = $_SESSION["senha_usuario"]; }else{ echo "Login não efectuado"; echo "<a href='../emprego.php>volatr a tentar</a>"; exit(); } if(!(empty($login_usuario) OR empty($senha_usuario))) { $cn = mysql_connect("localhost", "emprego", "240490"); mysql_select_db("emprego"); $resultado = mysql_query("select * from user_empresa where login = '$login_usuario'"); if(mysql_num_rows($resultado) == 1) { if($senha_usuario != mysql_result($resultado, 0, "senha")) { unset ($_SESSION["nome_usuario"]); unset ($_SESSION["senha_usuario"]); echo "Login não efectuado"; exit(); } }else{ unset ($_SESSION["nome_usuario"]); unset ($_SESSION["Senha_usuario"]); echo "Login não efectuado"; exit(); } } else{ echo "Login não efectuado"; exit(); } mysql_close($cn); ?> login <?php $login = $_POST['login']; $senha = $_POST['senha']; $cn = mysql_connect("localhost", "emprego", "240490"); mysql_select_db("emprego"); $resultado = mysql_query("select * from user_empresa where login = '$login'"); $resultado_senha = mysql_query("select * from user_empresa where senha = '$senha'"); $linhas = mysql_num_rows($resultado); $linhas_senha = mysql_num_rows($resultado_senha); $sql = mysql_query("select id from user_empresa where login = '$login'"); if($linhas == 0) { echo "Usuário não encontrado"; echo "<a href='../emprego.php'>voltar a tentar</a>"; } else { if($linhas_senha == 0) { echo "Senha errada"; echo "<a href='../emprego.php'>voltar a tentar</a>"; }else{ session_start(); $_SESSION["login_usuario"] = $login; $_SESSION["senha_usuario"] = $senha; while($x = mysql_fetch_assoc($sql)){ header("Location: empresa_user.php?id=".$x['id'].""); } } } mysql_close($cn); ?> na página secreta <? include "valida_session.php"; ?> logout <?php session_start(); $_SESSION = array(); session_destroy(); header("Location: ../emprego.php"); ?>obrigado,abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago Top Postado Junho 5, 2008 Denunciar Share Postado Junho 5, 2008 experimenta substituir o include por require_once("nome_da_pagina.php");[]s, thiago Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 7, 2008 Autor Denunciar Share Postado Junho 7, 2008 consegui por a funcionar, só está a dar um problema.eu preciso que cada user apenas tenha acesso restrito à sua página. Com o código que fiz depois de logado cada user pode entrar em qualquer página restrita.Fiz-me entender?como posso fazer isso?abraço e muito origado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 9, 2008 Autor Denunciar Share Postado Junho 9, 2008 alguém me pode dizer como criar um session que restringa o acesso apenas a uma página por user.ou seja, cada user apenas poderá entrar na sua página pessoalcomo faço? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 9, 2008 Denunciar Share Postado Junho 9, 2008 Amigão, usa um raciocínio simples, como faz pra restringir? Você verifica se algo existe, por exemplo:if(!isset($_SESSION['user'])){ echo 'Você não está logado'; exit; } Então, como você faz para restringir a apenas um usuário? Verifica se aquele usuário tem algum condição, única, por exemplo, guarde o ID do cara em uma sessão e verifica se ele tem aquela ID específica, ou seja, se você tem três páginas, a.php, b.php e c.php, e quer que apenas os IDs 1,2,3 entrem respectivamente nas páginas você colocaria. a.php if($_SESSION['id_user'] != 1){ echo 'Você não tem permissão pra acessar a página'; exit; } b.php if($_SESSION['id_user'] != 2){ echo 'Você não tem permissão pra acessar a página'; exit; } c.php if($_SESSION['id_user'] != 3){ echo 'Você não tem permissão pra acessar a página'; exit; }Pronto, na página a.php só vai entrar quem tiver o valor de 1 gravado na sessão, na página b.php quem tiver o valor de 2 na sessão e na c.php quem tiver o valor de 3 na sessão.Pronto, é só uma questão de parar meio segundo pra pensar... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 9, 2008 Autor Denunciar Share Postado Junho 9, 2008 brigadão.na verdade as páginas são do tipouser.php?id=id_usermas penso que é facil agora.muito obrigadoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 10, 2008 Autor Denunciar Share Postado Junho 10, 2008 seria algo assim?<?php session_start(); $login = $_POST['login']; $cn = mysql_connect("localhost", "emprego", "240490"); mysql_select_db("emprego"); $id_user = mysql_query("select id from user_empresa where login = '$login'"); if($_SESSION['id_user'] != $id_user){ echo '<center>Você não tem permissão pra acessar a página</center>'; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; exit; } if(isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) { $login_usuario = $_SESSION["login_usuario"]; $senha_usuario = $_SESSION["senha_usuario"]; $id_user = $_SESSION["id_user"]; }else{ echo "<center>Login não efectuado</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; exit(); } if(!(empty($login_usuario) OR empty($senha_usuario))) { $cn = mysql_connect("localhost", "emprego", "240490"); mysql_select_db("emprego"); $resultado = mysql_query("select * from user_empresa where login = '$login_usuario'"); if(mysql_num_rows($resultado) == 1) { if($senha_usuario != mysql_result($resultado, 0, "senha")) { unset ($_SESSION["nome_usuario"]); unset ($_SESSION["senha_usuario"]); unset ($_SESSION["id_user"]); echo "<center>Login não efectuado</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; exit(); } }else{ unset ($_SESSION["nome_usuario"]); unset ($_SESSION["Senha_usuario"]); unset ($_SESSION["id_user"]); echo "<center>Login não efectuado</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; exit(); } } else{ echo "<center>Login não efectuado</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; exit(); } mysql_close($cn); ?> login: <?php $login = $_POST['login']; $senha = $_POST['senha']; $cn = mysql_connect("localhost", "emprego", "240490"); mysql_select_db("emprego"); $resultado = mysql_query("select * from user_empresa where login = '$login'"); $resultado_senha = mysql_query("select * from user_empresa where senha = '$senha'"); $linhas = mysql_num_rows($resultado); $linhas_senha = mysql_num_rows($resultado_senha); $id_user = mysql_query("select id from user_empresa where login = '$login'"); if($linhas == 0) { echo "<center>Usuário não encontrado</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; } else { if($linhas_senha == 0) { echo "<center>Senha errada</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; }else{ session_start(); $_SESSION["login_usuario"] = $login; $_SESSION["senha_usuario"] = $senha; $_SESSION["id_user"] = $id_user; while($x = mysql_fetch_assoc($id_user)){ header("Location: empresa_user.php?id=".$x['id'].""); } } } mysql_close($cn); ?>abraço. me parece mais ou menso correcto Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 12, 2008 Autor Denunciar Share Postado Junho 12, 2008 será que mepoderiam dizer o k está mal? testei e penso que o erro é o facto de ele não tar a pegar correctamente o id do user, ou seja, sempre que um user tenta entrar diz que não é válido.onde está o erro? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 cassianooliver Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 a lógica que o ESerra citou é a que você precisa...refaça seu código por partes, e veja onde você ta errando... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 15, 2008 Autor Denunciar Share Postado Junho 15, 2008 eu penso que o meu erro está no "resgate" do id do user.eu digo para pegar o id do user do login$login = $_POST['login'];$id_user = mysql_query("select id from user_empresa where login = '$login'");será que isto está mal?este código está na página valida_session Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 17, 2008 Autor Denunciar Share Postado Junho 17, 2008 como faço para pegar a variavel id mediante o login escrito pelo user?na seria com o código:$id_user = mysql_query("select id from user_empresa where login = '$login'"); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 17, 2008 Denunciar Share Postado Junho 17, 2008 É, a query é essa... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 17, 2008 Autor Denunciar Share Postado Junho 17, 2008 (editado) sendo assim não é este o erro....eu tou a pegar o $login através de $_POST['login']...a questão é....a página que valida a sessão não é a página para a qual o user envia a info.ou seja, o user colca a pass e user e esta info vai ser enviada para a página login, e da página login vai para a valida....posso fazer $_POST sendo que não postei imediatamente antes o user? Editado Junho 17, 2008 por Diogo Freitas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 17, 2008 Autor Denunciar Share Postado Junho 17, 2008 a questão é a seguinte, ele tá a pegar as variáveis todas. se o user não digitar senha nem user (se for ao browse e digitar directo o endereço da página não entra) mas se o user estiver logado e digitar directo no browse o endereço da página de outro user é permitida a entrada...deste género:www.uttil.com/empresa_user.php?id=5 (empresa com nome x)www.uttil.com/empresa_user.php?id=6 (empresa com nome y)se o x estiver logado e digitar www.uttil.com/empresa_user.php?id=6 (empresa com nome y) então eçle consegue entrar na página do y. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 17, 2008 Denunciar Share Postado Junho 17, 2008 Porque você não grava o id do cara na sessão e ai pega o que estiver na sessão em vez de ficar passando os dados por querystring? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 17, 2008 Autor Denunciar Share Postado Junho 17, 2008 e eu fiz isso:<?php $cn = mysql_connect("localhost", "emprego", "240490"); mysql_select_db("emprego"); $login = $_POST['login']; $senha = $_POST['senha']; $resultado = mysql_query("select * from user_empresa where login = '$login'"); $resultado_senha = mysql_query("select * from user_empresa where senha = '$senha'"); $linhas = mysql_num_rows($resultado); $linhas_senha = mysql_num_rows($resultado_senha); $id_user = mysql_query("select id from user_empresa where login = '$login'"); $id_user_linhas = mysql_num_rows($id_user); if($linhas == 0) { echo "<center>Usuário não encontrado</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; } else { if($linhas_senha == 0) { echo "<center>Senha errada</center>"; echo "<center><a href='../emprego.php'>voltar a tentar</a></center>"; }else{ session_start(); $_SESSION["login_usuario"] = $login; $_SESSION["senha_usuario"] = $senha; $_SESSION["id_user_usuario"] = $id_user; while($x = mysql_fetch_assoc($id_user)){ header("Location: empresa_user.php?id=".$x['id'].""); } } } mysql_close($cn); ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 17, 2008 Denunciar Share Postado Junho 17, 2008 3 querys? Diogo, dá uma pesquisada no google, pois esse teu sistema de login não tem a menor lógica... mas se quiser continuar a usar ele, boa sorte, bom, só ressaltando que você não está salvando o id do cara, porque olha só...$id_user = mysql_query("select id from user_empresa where login = '$login'"); ..... $_SESSION["id_user_usuario"] = $id_user; Com a query você pegou o ID, mas ai você precisa obter os resultados que vieram da query... use mysql_fetch_assoc, como eu sei que você vai perguntar como usa já vou colocar... $id_user = mysql_query("select id from user_empresa where login = '$login'"); $dados_da_ultima_query = mysql_fetch_assoc($id_user); .... $_SESSION["id_user_usuario"] = $dados_da_ultima_query['id']; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 17, 2008 Autor Denunciar Share Postado Junho 17, 2008 saquei....brigadojá agora, pk não tem lógica o sistema?não é seguro?neste caso a necessidade é de segurança pois é para uma empresa ...:( Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 cassianooliver Postado Junho 17, 2008 Denunciar Share Postado Junho 17, 2008 a lógica que o ESerra disse, acho que ele se referiu à forma como você faz para "pegar" os dados e compará-los...tipo, você quer verificar se há o determinado login no banco certo? basta fazer isso...$login = $_POST["login"]; $sql = mysql_query("SELECT * FROM tabela WHERE login = '$login'"); if(mysql_num_rows($sql) > 0) { // aqui todas as ações para o usuário logado } else { echo "dados inválidos"; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 18, 2008 Denunciar Share Postado Junho 18, 2008 No caso tem que verificar se login existe, se a senha está correta, dá pra fazer as duas coisas de uma vez na mesma query, além do que, pegar os dados vindo de um form e jogar direto na query é pedir pra ter problema, pesquise sobre a função mysql_real_escape_string e sql injection... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 18, 2008 Autor Denunciar Share Postado Junho 18, 2008 pelo que tive a ler a função mysql_real_escape_string permite tornar mais seguro o sistema de login pois impede certos caractéres ne?ou seja, poderei usála para as variáveis login e senha....relativamente á utilização de uma query para verificar o login e a senha penso que já vi como usar:$query = "select * from db where login = '{$login}' AND senha = '{$senha}'"; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 18, 2008 Autor Denunciar Share Postado Junho 18, 2008 modifiquei o login e mantive a parte valida_session<?php $cn = mysql_connect("localhost", "delipoli_users", "users"); mysql_select_db("delipoli_users"); $login = $_POST['login']; $senha = $_POST['senha']; $login_escape = addslashes($login); $senha_escape = addslashes($senha); $resultado = mysql_query("select * from users where login = '{$login_escape}' AND senha = '{$senha_escape}'"); $linhas = mysql_num_rows($resultado); $id = mysql_query("select id from users where login = '{$login_escape}'"); $id_fetch = mysql_fetch_assoc($id); if($linhas == 0) { echo "<center>Usuário não encontrado ou senha errada</center>"; echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>"; }else{ session_start(); $_SESSION["login_usuario"] = $login_escape; $_SESSION["senha_usuario"] = $senha_escape; $_SESSION["id_usuario"] = $id_fetch['id']; header("Location: empresa_user.php?id=".$id_fetch['id'].""); } mysql_close($cn); ?>está a funcionar, mas gostaria de saber a sua opinião acerca da segurança e saber se estas alterações que fiz aumentam a segurançaabraço e obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 19, 2008 Autor Denunciar Share Postado Junho 19, 2008 boas tardes novamente,surgiu-me um pequeno problema.quando adiciono o include valida_session.php noutra página já após ter sido feita a validação do user dá erro. terei que fazer outro valida_session para validar a entrada após a validação inicial?isto está um pouco confuso, imaginem a página secreta.php. quando o user se valida vai para a pagina secreta.php. até ai beleza. agora, se dessa página ele kiser ir para a secreta2.php ai tem o acesso negado.abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 19, 2008 Autor Denunciar Share Postado Junho 19, 2008 crie outra valida_sessionserá que tem segurança suficiente?<?php session_start(); if(!(empty($login_usuario) OR empty($senha_usuario))) { $cn = mysql_connect("localhost", "delipoli_users", "users"); mysql_select_db("delipoli_users"); $resultado = mysql_query("select * from users where login = '$login_usuario'"); if(mysql_num_rows($resultado) == 1) { if($senha_usuario != mysql_result($resultado, 0, "senha")) { unset ($_SESSION["login_usuario"]); unset ($_SESSION["senha_usuario"]); unset ($_SESSION["id_usuario"]); echo "<center>Login não efectuado</center>"; echo "<center><img src='../../gif/perigo.png' /></center><p>"; echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>"; exit(); } }else{ unset ($_SESSION["login_usuario"]); unset ($_SESSION["senha_usuario"]); unset ($_SESSION["id_usuario"]); echo "<center>Login não efectuado</center>"; echo "<center><img src='../../gif/perigo.png' /></center><p>"; echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>"; exit(); } } else{ echo "<center>Login não efectuado</center>"; echo "<center><img src='../../gif/perigo.png' /></center><p>"; echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>"; exit(); } mysql_close($cn); ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 19, 2008 Denunciar Share Postado Junho 19, 2008 Diogo Freitas, mostre aum pingo de educação para com os outros usuários do fórum, você sem nenhum tipo de constrangimento vive dando UPs nos seus tópicos, quando você quiser inserir uma nova informação utilize o botão EDITAR: , como eu já te dei outros avisos e você pelo visto gosta disso, a partir de agora, simplesmente vou começar a fechar os seus tópicos. Lembre-se, utilizar o fórum é um privilégio e não um direito. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diogo Freitas Postado Junho 19, 2008 Autor Denunciar Share Postado Junho 19, 2008 pow Eserra me desculpa...dizer que não é certo é uma coisa.agora dizer que é falta de educação é outra completamente diferente, e isso eu não fiz. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Diogo Freitas
boas tardes,
resolvi criar um sistema de login com session e não utilizar cookies.
está td bom. porém, o mesmo colocando include "valida_session.php" nas páginas secretas ele não obdece, ou seja, qualquer um pode entrar?
será que é por utilizar id?
os códigos...
valida session
login na página secreta logoutobrigado,
abraço
Link para o comentário
Compartilhar em outros sites
25 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.