Jump to content
elrey

[Resolvido] Login erro

Recommended Posts

elrey

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 by elrey

Share this post


Link to post
Share on other sites
Devexz

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 by Devexz

Contador de calorias: caloriaspordia.com

Share this post


Link to post
Share on other sites
elrey

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 by elrey

Share this post


Link to post
Share on other sites
HappyHippyHippo

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 by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
elrey

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 ?

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
elrey

@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 by elrey

Share this post


Link to post
Share on other sites
Devexz

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

Share this post


Link to post
Share on other sites
elrey

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 by elrey

Share this post


Link to post
Share on other sites
elrey

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

Share this post


Link to post
Share on other sites
Pivot

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.

Share this post


Link to post
Share on other sites
elrey

@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.

Share this post


Link to post
Share on other sites
Devexz

@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 by Devexz

Contador de calorias: caloriaspordia.com

Share this post


Link to post
Share on other sites
Pivot

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.

Share this post


Link to post
Share on other sites
elrey

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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.