PF2G Posted May 29, 2012 at 09:34 AM Report #458780 Posted May 29, 2012 at 09:34 AM Bom dia, Eu estou a fazer um sistema de login... E agora estou na parte em que lê se o user ta logado ou não, mas o que me está a acontecer é assume sempre que o user não esta logado: <?PHP include 'db_connect.php'; session_start(); //user 'logado' ou nao if (!(isset($_SESSION['username']) && $_SESSION['username'] != '')) { header ("Location: index.php"); } $username = $_SESSION['username']; $query_lang="SELECT * FROM content_lang"; $lang=mysql_query($query_lang, $connect); $row_lang=mysql_fetch_assoc($lang); $query_cont="SELECT * FROM content WHERE id = '".$row_lang['id_content']."'"; $cont=mysql_query($query_cont, $connect); $row_cont=mysql_fetch_assoc($cont); ?> <html> <head> <title>Adminstração</title> </head> <body style="color:#FFF;" bgcolor="#666666"> Bem-Vindo ao Backoffice, <?PHP $username ?>! <a href="logout.php"> Sair</a> <br/> <br/> <a href="adicionar.php"><input type="button" value="Adicionar Novo"></input></a> <?PHP do { ?> <table width="100%" style="text-align:center;" align="center" border=1> <tr> <td width="5%"> IDENTIFICADOR </td> <td width="5%"> LINGUAGEM </td> <td width="10%"> TÍTULO </td> <td width="50%"> CONTEÚDO </td> <td width="5%"> </td> <td width="5%"> </td> </tr> <tr> <td width="5%"> <?PHP echo $row_cont['identifier']; ?> </td> <td width="5%"> <?PHP echo $row_lang['lang']; ?> </td> <td width="10%"> <?PHP echo $row_lang['titulo']; ?> </td> <td align="justify" width="50%"> <?PHP echo $row_lang['conteudo']; ?> </td> <td width="5%"> <a href="editar.php">Editar</a> </td> <td width="5%"> <a href="remover.php">Remover</a> </td> </tr> </table> <?PHP } while ($row_lang=mysql_fetch_assoc($lang)); ?> </body> </html>
johnmaia Posted May 29, 2012 at 09:45 AM Report #458785 Posted May 29, 2012 at 09:45 AM (edited) A tua condição if está errada //user 'logado' ou nao if (!(isset($_SESSION['username']) && $_SESSION['username'] == '')) Edited May 29, 2012 at 09:46 AM by johnmaia
PF2G Posted May 29, 2012 at 09:57 AM Author Report #458792 Posted May 29, 2012 at 09:57 AM A tua condição if está errada //user 'logado' ou nao if (!(isset($_SESSION['username']) && $_SESSION['username'] == '')) Continua a dar o mesmo problema...eu faço login e manda-me po index.php e eu quero que ele vá para o admin.php Eu quero esta função logado ou nao para proteger melhor a página de gestão, se não qualquer um entra...
softklin Posted May 29, 2012 at 10:08 AM Report #458801 Posted May 29, 2012 at 10:08 AM (edited) Garante que o nome da tua sessão é mesmo "username". Num outro tópico teu, usaste "user". Em todo o caso, coloca para testes: var_dump($_SESSION); depois do session_start() para veres o que está no array das sessões. Quanto ao if, acho que deveria ser: if (!(isset($_SESSION['username']) || $_SESSION['username'] == '')) (As duas barras verticais || são o OR; também podes usar OR se quiseres) E a propósito, depois de redireccionares, coloca uma chamada à função exit(), senão o resto do script vai continuar a ser executado. Edited May 29, 2012 at 10:09 AM by softklin Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.
PF2G Posted May 29, 2012 at 10:13 AM Author Report #458802 Posted May 29, 2012 at 10:13 AM Garante que o nome da tua sessão é mesmo "username". Num outro tópico teu, usaste "user". Em todo o caso, coloca para testes: var_dump($_SESSION); depois do session_start() para veres o que está no array das sessões. Quanto ao if, acho que deveria ser: if (!(isset($_SESSION['username']) || $_SESSION['username'] == '')) (As duas barras verticais || são o OR; também podes usar OR se quiseres) E a propósito, depois de redireccionares, coloca uma chamada à função exit(), senão o resto do script vai continuar a ser executado. O dump dá-me empty... E com o "||" entrou na conta, por isso acho que não é a opção correta.
softklin Posted May 29, 2012 at 10:18 AM Report #458806 Posted May 29, 2012 at 10:18 AM Se o dump te deu empty e o puseste depois da chamada ao session_start, então a resposta é simples: a tua sessão não foi bem definida, e não tens dados de utilizador. Volta ao teu script de login e garante que a sessão é corretamente definida. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.
PF2G Posted May 29, 2012 at 10:41 AM Author Report #458816 Posted May 29, 2012 at 10:41 AM Se o dump te deu empty e o puseste depois da chamada ao session_start, então a resposta é simples: a tua sessão não foi bem definida, e não tens dados de utilizador. Volta ao teu script de login e garante que a sessão é corretamente definida. Tá bem: login.php <?php session_start(); include "db_connect.php"; $username = $_POST['user']; $pass = $_POST['password']; $sql="SELECT * FROM utilizadores WHERE username='". $username. "'"; $resultado = mysql_query($sql, $connect) or die(mysql_error()); $num = mysql_fetch_assoc($resultado); if ($username == $num['username'] AND sha1($pass) == $num['password']) { $username=$_SESSION['username']; header("Location: admin.php"); } else { header("Location: login_error.php"); } mysql_close($connect); ?> admin.php <?PHP include 'db_connect.php'; session_start(); var_dump($_SESSION); //user 'logado' ou nao if (!(isset($_SESSION['username']) || $_SESSION['username'] == '')) { header ("Location: index.php"); } $username = $_SESSION['username']; $query_lang="SELECT * FROM content_lang ORDER BY id ASC"; $lang=mysql_query($query_lang, $connect); $row_lang=mysql_fetch_assoc($lang); $query_cont="SELECT * FROM content WHERE id = '".$row_lang['id_content']."'"; $cont=mysql_query($query_cont, $connect); $row_cont=mysql_fetch_assoc($cont); ?> <html> <head> <title>Adminstração</title> <!----------------------------------------------> <script type="text/JavaScript"> function confirmDelete() { var agree=confirm("Tem a certeza que quer remover?"); if (agree) { return true; } else { return false; } } </script> <!----------------------------------------------> </head> <body style="color:#FFF;" bgcolor="#666666"> Bem-Vindo ao Backoffice, <?PHP $username ?>! <a href="logout.php"> Sair</a> <br/> <br/> <a href="adicionar.php"><input type="button" value="Adicionar Novo"></input></a> <table width="100%" style="text-align:center;" align="center" border=1> <tr> <td width="5%"> IDENTIFICADOR </td> <td width="5%"> LINGUAGEM </td> <td width="10%"> TÍTULO </td> <td width="50%"> CONTEÚDO </td> <td width="5%"> </td> <td width="5%"> </td> </tr> <?PHP do { ?> <tr> <td width="5%"> <?PHP echo $row_cont['identifier']; ?> </td> <td width="5%"> <?PHP echo $row_lang['lang']; ?> </td> <td width="10%"> <?PHP echo $row_lang['titulo']; ?> </td> <td align="justify" width="50%"> <?PHP echo $row_lang['conteudo']; ?> </td> <td width="5%"> <a href="edit.php">Editar</a> </td> <td width="5%"> <a href="" onClick="confirmDelete();">Remover</a> </td> </tr> </table> <?PHP } while ($row_lang=mysql_fetch_assoc($lang)); ?> </body> </html> index.php <html> <head> <title>Adminstração</title> </head> <body bgcolor="#666666"> <table width="100%" height="100%" border="0" align="center" cellpadding="0" cellspacing="1"> <tr> <form method="post" action="login.php"> <td align="center" valign="middle"> <table width="300px" cellpadding="0" cellspacing="3" bgcolor="#FFFFFF" style=" border: 2px solid #FFFFFF;"> <tr> <td style=" border-style:none;"> <br> </td> </tr> <tr> <td align="right" style="font-size: 13;font-family: Arial, Helvetica, sans-serif;font-weight: bold;border-style:none;"> Utlizador: </td> <td style=" border-style:none;"> <input name="user" type="text"> </td> </tr> <tr> <td align="right" style="font-size: 13;font-family: Arial, Helvetica, sans-serif;font-weight: bold;border-style:none;"> Password: </td> <td style=" border-style:none;"> <input name="password" type="password"> </td> </tr> <tr> <td colspan="2" align="center" style=" border-style:none;"> <input type="submit" name="submit" value="Login"> </td> </tr> <tr> <td style=" border-style:none;"> <br> </td> </tr> </table> <span class="style1" style="font-size: 13;font-family: Arial, Helvetica, sans-serif;font-weight: bold;color: red;"> </span> </td> </form> </tr> </table> </body> </html>
softklin Posted May 29, 2012 at 10:47 AM Report #458824 Posted May 29, 2012 at 10:47 AM (edited) No teu login.php, estás a atribuir o valor de sessão à variável $username, ou seja, estás a ler a sessão. Nessa altura, o teu interesse é escrever na sessão o utilizador que acabou de iniciar sessão no teu sistema, por isso tens de inverter a ordem da atribuição. $_SESSION['username'] = $username; Edited May 29, 2012 at 10:48 AM by softklin Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.
PF2G Posted May 29, 2012 at 10:50 AM Author Report #458826 Posted May 29, 2012 at 10:50 AM No teu login.php, estás a atribuir o valor de sessão à variável $username, ou seja, estás a ler a sessão. Nessa altura, o teu interesse é escrever na sessão o utilizador que acabou de iniciar sessão no teu sistema, por isso tens de inverter a ordem da atribuição. $_SESSION['username'] = $username; Eish fui eu que mudei sem querer :S Agora tenho um problema se eu mudar o url para ir para o admin.php ele entra eu não quero... Como é que faço?
johnmaia Posted May 29, 2012 at 10:57 AM Report #458830 Posted May 29, 2012 at 10:57 AM Entra porque está a resumir a sessão já iniciada.
PF2G Posted May 29, 2012 at 11:02 AM Author Report #458832 Posted May 29, 2012 at 11:02 AM Eu entro com a conta existente e o dump dá-me o username, tudo bem. depois de fazer logout se eu mudar o url ele dá-me empty e isso nao pode acontecer nao pode se quer entrar...
johnmaia Posted May 29, 2012 at 11:08 AM Report #458835 Posted May 29, 2012 at 11:08 AM Retira: var_dump($_SESSION);
PF2G Posted May 29, 2012 at 11:09 AM Author Report #458836 Posted May 29, 2012 at 11:09 AM Retira: var_dump($_SESSION); Ja tirei, nao muda nada.
johnmaia Posted May 29, 2012 at 11:23 AM Report #458844 Posted May 29, 2012 at 11:23 AM (edited) Substitui a tua condição por esta: if (!isset($_SESSION['username']) || $_SESSION['username'] == '') header("Location: index.php"); Edited May 29, 2012 at 11:23 AM by johnmaia
PF2G Posted May 29, 2012 at 11:41 AM Author Report #458851 Posted May 29, 2012 at 11:41 AM Ok... ja funciona. Obrigado a todos que me ajudaram 😉
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now