Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

digitalctzen

session no PHP

Recommended Posts

Estou tentando desenvolver um site aonde apenas o usuario logado com sessão podera acessar a página, só que sempre que digito o login ele volta pra index.php, nao consigo achar o erro, ele nunca da certo, ja ta explodindo minha cabeça, alguem por gentileza poderia me ajudar ?

 

semttulonkn.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

No arquivo de validação, você verifica se está setado a sessão, caso não inicia a sessão e a destrói, esse é problema, o session_start() tem que estar antes, caso contrário $_SESSION não existirá (a menos que o servidor esteja configurado para iniciar as sessões automatiamente).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o codigo onde vc esta com problema se num fica dificil ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o codigo onde vc esta com problema se num fica dificil ajudar

mais voce leu oque eu postei antes da imagem ? o codigo é pra redirecionar para a pg_hrr.php mais sempre volta para a index.php..

 

No arquivo de validação, você verifica se está setado a sessão, caso não inicia a sessão e a destrói, esse é problema, o session_start() tem que estar antes, caso contrário $_SESSION não existirá (a menos que o servidor esteja configurado para iniciar as sessões automatiamente).

eu tentei com empty tambem e nao deu certo, ele sempre volta pra index.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema já foi dito pelo ESerra.

 

// inicie a sessão no topo da página

// retire o session destroy

Fiz oque foi sugerido, continua a mesma coisa, nao importa oque eu digite sempre volta para a index.php..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando no script onde você monta as sessões, os ifs estão errados, comparação se faz com == ou === e não apenas =.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando no script onde você monta as sessões, os ifs estão errados, comparação se faz com == ou === e não apenas =.

Bom, troquei os sinais, e continua a mesma coisa, nao estou entendendo ...

@EDIT: Dei uma simplificada no código, mais ainda continua sempre retornando na index.

2wp3wi8.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu código só vai funcionar se você tiver 1 usuário cadastrado, pois no o valor das variáveis $val_user e $val_pass sempre será o da última volta do laço, você já deve passar o usuário/senha (ou apenas o usuário se preferir) na query e ai resolver o resto das regras com o PHP. E faça o post do código em texto aqui no tópico, pq é complicado ficar vendo uma imagem sem poder usar um ctrl+f para buscar no meio do script.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O seu código só vai funcionar se você tiver 1 usuário cadastrado, pois no o valor das variáveis $val_user e $val_pass sempre será o da última volta do laço, você já deve passar o usuário/senha (ou apenas o usuário se preferir) na query e ai resolver o resto das regras com o PHP. E faça o post do código em texto aqui no tópico, pq é complicado ficar vendo uma imagem sem poder usar um ctrl+f para buscar no meio do script.

 

 

val_user.php

<?php

  $Login  =($_POST['login']);
  $Senha=($_POST['senha']);
  $redir=0;
  
if (!empty($_POST) AND (empty($_POST['login']) OR empty($_POST['senha']))) 
{header("Location:index.php");}


$username = "root";
$password = "";
$hostname = "localhost"; 
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
or die("Falha ao conectar no MySQL");
//select a database to work with
$selected = mysql_select_db("prates",$dbhandle) 
or die("Nenhum banco de dados foi selecionado");

$sql = "SELECT * FROM users";
$query = mysql_query($sql) or die (mysql_error());

while ($rows=mysql_fetch_object($query))
{
$val_user=$rows->Login;
$val_pass=$rows->Senha;
}


if ($val_user==$Login && $val_pass==$Senha)
{
$redir=1;
session_start();
$_SESSION['auth']=$Login;
header("Location:pg_hrr.php");
}

else
{
$redir=0;
header("Location:index.php");
}
	
?> 

 

pg_hrr.php

<?php 

if (empty($_SESSION['auth']))
{
session_start();
header("Location: index.php ");
}

?>

 

Tem sim um usuario cadastrado no db...

semttulovpa.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está fazendo errado...

$_SESSION é um superglobal especial porque a mamãe quis e só existe se session_start() for invocado e executado de forma bem sucedida. Ou seja, a verificação começa assim:

if( ! isset( $_SESSION ) ) {
 
    session_start();
}


Depois dessa condição é que você executa a sua rotina de verificação:

if( ! isset( $_SESSION ) ) {
 
    session_start();
}
 
if( ! isset( $_SESSION['id'] ) ) {
 
    header( 'Location: index.php' );
}


Porém, o PHP tem um motor meio preguiçoso com relação às sessões. Eu não vou explicar aqui o como ou porquê pois o @Henrique Barcelos já o fez no blog dele, na seção "Dados da sessão “sumindo” após redirecionamento".

 

Leia o artigo, entenda o que está acontecendo, corrija seu código e se não funcionar veremos daí.

 

Bons estudos :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado por compartilhar esse conhecimento, espero que daqui uns tempos de experiencia eu tambem esteja ajudando os usuarios, vlw pela dica vou tentar, caso nao de certo vou tentar ver as configurações do php.ini, acho que pode ser isso tambem, desconfio :pinch:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Augusto, voce realmente me salvou, um bug que eu realmente demoraria um bom tempo para descobrir, estou quase a uma semana apanhando desse código, session_commit(); foi a solução... obrigado pela ajuda, agradeci o seu post !

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.