elrey Posted October 4, 2013 at 10:08 PM Report #527687 Posted October 4, 2013 at 10:08 PM (edited) Boas, Eu sei que isto pode ser um assunto já muito "debatido" aqui pelo fórum, mas eu já vi vários exemplos inclusive o que está na wiki aqui do P@P, mas não consigo resolver o meu problema. Estou a criar um site para um projeto da escola, e o assunto do login, já me está umas dores de cabeça. 🙂 O meu problema é, faço login, ele verifica na bd e com sucesso. Mas quando tento fazer logout, ele não faz, simplesmente fico sempre com o login feito. Aqui fica o código: Inicio da página, pelo meio tem o else porque se estiver logado, faz algo, se não estiver logado, faz outra coisa... <?php // Verificar se está logado @session_start(); if(!empty($_SESSION['username'])) { ?> Código de login: <?PHP if (isset($_POST['btNlogin'])) { if (!EMPTY($_POST['type_user']) && !EMPTY($_POST['type_password'])) { @session_start(); require("connection.php"); $abpower = mysqli_connect(DB_SERVER, DB_UTILIZADOR, DB_PASSWORD) or die ("Cannot Connect!"); mysqli_select_db($abpower, DB_NOME) or die("Cannot Select DB!"); $user = mysqli_real_escape_string($abpower, $_POST['type_user']); $pass = hash('sha256', $_POST['type_password']); $password = mysqli_real_escape_string($abpower, md5($pass)); $login=mysqli_query($abpower, "SELECT * FROM utilizadores WHERE username='$user' AND password='$password'"); if($login && mysqli_num_rows($login) == 1) { $_SESSION['username'] = mysqli_fetch_assoc($login); //$_SESSION['utilval']=1; //header("Location: index.php"); //echo "<p>Sessão iniciada com sucesso como {$_SESSION['username']}</p>"; } else { echo ("<script>alert('Utilizador ou password inválido');</script>"); unset($_POST['type_user']); unset($_POST['type_password']); } } else { echo ("<script>alert('Introduza o seu utilizador e password');</script>"); unset($_POST['btNlogin']); } } ?> E aqui fica o quando carrego no botão de logout <?php } if(isset($_POST['logout'])) { @session_start(); unset($_SESSION['username']); @session_destroy(); } ?> Se for necessário mostrar mais código, eu posto. Obrigado desde já. Edited October 4, 2013 at 10:09 PM by elrey
Devexz Posted October 4, 2013 at 10:28 PM Report #527690 Posted October 4, 2013 at 10:28 PM (edited) certifica-te que o session_start() está no incio da tua página php, pois o mesmo não ser utilizado depois de qualquer output. Edited October 4, 2013 at 10:29 PM by Devexz Contador de calorias: caloriaspordia.com
I-NOZex Posted October 4, 2013 at 10:30 PM Report #527691 Posted October 4, 2013 at 10:30 PM exprimenta: unset($_SESSION['username']); $_SESSION = array(); session_destroy(); B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
elrey Posted October 5, 2013 at 01:04 AM Author Report #527700 Posted October 5, 2013 at 01:04 AM (edited) Obrigado por responderem. Mas continua sem funcionar 😞 Sinceramente, já não sei mais o que fazer. EDIT: Acho que sei o porquê de não conseguir fazer logout. Eu tinha um onclick para trocar de página no input, mas para testar, tirei e meti um header para quando houver o click no botão destrói a sessão e muda de página, e simplesmente não faz nada... :s Edited October 5, 2013 at 01:12 AM by elrey
HappyHippyHippo Posted October 5, 2013 at 07:48 AM Report #527708 Posted October 5, 2013 at 07:48 AM (edited) não existe nada no teu código que te parecça estranho ? mesmo só em meia dúzia de linhas ? <?php } // <--------------------- que é isto ??? if(isset($_POST['logout'])) { @session_start(); unset($_SESSION['username']); @session_destroy(); } ?> existe um ficheir essencial para quem anda a brincar com WebDevelopment log de erros do browser Edited October 5, 2013 at 07:50 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
elrey Posted October 6, 2013 at 03:00 AM Author Report #527773 Posted October 6, 2013 at 03:00 AM não existe nada no teu código que te parecça estranho ? mesmo só em meia dúzia de linhas ? <?php } // <--------------------- que é isto ??? if(isset($_POST['logout'])) { @session_start(); unset($_SESSION['username']); @session_destroy(); } ?> existe um ficheir essencial para quem anda a brincar com WebDevelopment log de erros do browser Isso está a fechar o " if " do inicio da página, que verifica se o utilizador está logado ou não, como está no fim do ficheiro juntei as duas coisas. Penso que não há problema, mas neste momento já não está aí, já meti mais acima, mas continua sem funcionar. se calhar seria melhor eu colocar aqui o código da página toda, não ?
HappyHippyHippo Posted October 6, 2013 at 09:13 AM Report #527779 Posted October 6, 2013 at 09:13 AM Isso está a fechar o " if " do inicio da página, que verifica se o utilizador está logado ou não, como está no fim do ficheiro juntei as duas coisas. então estás a dizer que ao teres porcaria ants do código apresentado, ignoraste o post anterior que dizia : certifica-te que o session_start() está no incio da tua página php, pois o mesmo não ser utilizado depois de qualquer output. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
elrey Posted October 6, 2013 at 12:42 PM Author Report #527796 Posted October 6, 2013 at 12:42 PM (edited) @HappyHippyHippo, não ignorei, porque se reparares o meu inicio de página é isto: <?php // Verificar se está logado @session_start(); // < - Está Aqui! if(!empty($_SESSION['username'])) { ?> O session_start() vem antes do if. Edited October 6, 2013 at 12:44 PM by elrey
Devexz Posted October 6, 2013 at 01:22 PM Report #527800 Posted October 6, 2013 at 01:22 PM porque é que chamas o @session_start(); várias vezes? Além disso remove o @ para que o php possa mostrar algum erro que esteja a ocurrer, posta o código completo para perceber melhor. Verifica também se a session tem os dados corretos. Contador de calorias: caloriaspordia.com
elrey Posted October 6, 2013 at 08:06 PM Author Report #527822 Posted October 6, 2013 at 08:06 PM (edited) Quando vai fazer algo, para resumir a sessão ou criá-la. Mas acho que não é necessário, penso que basta só chamar uma vez a sessão. Aqui fica o código todo, já depois de uma limpeza: <?php session_start(); echo print_r($_SESSION['username']); if(!empty($_SESSION['username'])) { include('includes/logindone.php'); if(isset($_POST['btNlogout'])) { unset($_SESSION['username']); $_SESSION = array(); session_destroy(); } } else { include('includes/loginundone.php'); if (isset($_POST['btNlogin'])) { if (!EMPTY($_POST['type_user']) && !EMPTY($_POST['type_password'])) { require("connection.php"); $abpower = mysqli_connect(DB_SERVER, DB_UTILIZADOR, DB_PASSWORD) or die ("Cannot Connect!"); mysqli_select_db($abpower, DB_NOME) or die("Cannot Select DB!"); $user = mysqli_real_escape_string($abpower, $_POST['type_user']); $pass = hash('sha256', $_POST['type_password']); $password = mysqli_real_escape_string($abpower, md5($pass)); $login=mysqli_query($abpower, "SELECT * FROM utilizadores WHERE username='$user' AND password='$password'"); if($login && mysqli_num_rows($login) == 1) { $_SESSION['username'] = mysqli_fetch_assoc($login); //$_SESSION['utilval']=1; //header("Location: index.php"); //echo "<p>Sessão iniciada com sucesso como {$_SESSION['username']}</p>"; } else { echo ("<script>alert('Utilizador ou password inválido');</script>"); unset($_POST['type_user']); unset($_POST['type_password']); } } else { echo ("<script>alert('Introduza o seu utilizador e password');</script>"); unset($_POST['btNlogin']); } } } ?> Resultado da sessão: Array ( [username] => admin [password] =>bced6fd149cfcdb85741768da12e41c6 ) 1 Edited October 6, 2013 at 08:13 PM by elrey
Devexz Posted October 6, 2013 at 10:23 PM Report #527830 Posted October 6, 2013 at 10:23 PM Certificate que estás a entrar no if do logout fazendo um echo dentro do mesmo Contador de calorias: caloriaspordia.com
elrey Posted October 6, 2013 at 11:22 PM Author Report #527832 Posted October 6, 2013 at 11:22 PM Não entra no if, já tinha referido um pouco mais acima que não quando carregava no botão de logout, não fazia nada. Tenho assim: <form name="form_logout" method="post"> <input type="button" Value="Logout" name="btNlogout" /> </form> A mim parece-me estar tudo correto, mas ainda não percebi o porquê de não funcionar. :s
Pivot Posted October 7, 2013 at 10:16 AM Report #527853 Posted October 7, 2013 at 10:16 AM Cria um ficheiro assim: <?php session_start(); session_destroy(); header("Location: index.php"); ?> Guarda essa página como sair.php Agora executa essa página individualmente e depois vê se resulta ou não. Se não resultar é alguma incompatibilidade do browser?! Abraço, Rafael.
elrey Posted October 7, 2013 at 06:38 PM Author Report #527934 Posted October 7, 2013 at 06:38 PM @Pivot, assim já funcionou. Acho que não seja, porque já testei com IE, Chrome e Yandex, em todos tenho o mesmo problema. :s Não entendi ainda.
Solution Devexz Posted October 7, 2013 at 08:37 PM Solution Report #527959 Posted October 7, 2013 at 08:37 PM (edited) @Pivot, assim já funcionou. Acho que não seja, porque já testei com IE, Chrome e Yandex, em todos tenho o mesmo problema. :s Não entendi ainda. se assim já funcionou então o problema está no codigo! primeiro mete: <input type="submit" Value="Logout" name="btNlogout" /> // submit Depois no php if(isset($_POST["btNlogout"])) { unset($_SESSION['username']); session_destroy(); } Edited October 7, 2013 at 08:38 PM by Devexz Contador de calorias: caloriaspordia.com
Pivot Posted October 8, 2013 at 09:17 AM Report #528018 Posted October 8, 2013 at 09:17 AM elrey, se já funcionou, faz um include no if em que verificas se ele carregou no botão de logout... 🙂 Se não resultar diz ai... Abraço, Rafael.
elrey Posted October 8, 2013 at 07:23 PM Author Report #528110 Posted October 8, 2013 at 07:23 PM se assim já funcionou então o problema está no codigo! primeiro mete: <input type="submit" Value="Logout" name="btNlogout" /> // submit Depois no php if(isset($_POST["btNlogout"])) { unset($_SESSION['username']); session_destroy(); } Alterei como disseste, e funcionou. Só que eu já tinha tentado meter submit e continuava igual, mas pronto. Já está tudo resolvido. Obrigado a todos, pela ajuda. 🙂 Abraço.
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