Problema ao verificar se usuario está logado

Enviada por Adenes Junior 
Adenes Junior
Problema ao verificar se usuario está logado
24 de July de 2014 às 06:14PM
Estou com um problema de reconhecer se o usuário está logado quando mudo de página verifico se o usuário está logado pelo método usuarioLogado(). Uso um método para criar uma sessão e um cookie para melhor segurança, porém quando mudo para outra página verifico se o usuario está logado, só que está dando como false, usuário não logado. verifiquei se o valor do cookie se confere com o cookie criado, estão diferente e não tenho idéia o porque.

[code]
function logaUsuario($usuario, $senha, $lembrar = false) {

$conectar = new acessarbase();
if ($conectar->statusConexao()){
// Verifica se é um usuário válido
if ($this->validaUsuario($usuario, $senha)) {
$hash = $this -> validaSenha($senha);

// Inicia a sessão
if ($this->iniciaSessao AND !isset($_SESSION)) {
session_start();
}

// Filtra os dados
if ($this->filtraDados) {
$usuario = pg_escape_string($usuario);
$senha = pg_escape_string($senha);
}

// Traz dados da tabela
if ($this->dados != false) {
// Adiciona o campo do usuário na lista de dados
if (!in_array($this->campos['usuario'], $this->dados)) {
$this->dados[] = 'usuario';
}

// Monta o formato SQL da lista de campos
$dados = '\'' . join('\', \'', array_unique($this->dados)) . '\'';

// Os dados são case-sensitive
$binary = ($this->caseSensitive) ? 'BINARY' : '';

// Consulta os dados
$sql = "SELECT *
FROM usuarios
WHERE email = '$usuario'";

$query = pg_query($sql);

$resultado = pg_fetch_assoc($query);

if ($resultado['email'] == null) {
$this ->erro = "O usuário informado não está cadastrado no sistema!<br>Verifique você informou corretamente a conta do usuário.";
return false;
}

$resultado = pg_fetch_all($query);

foreach ($resultado as $item) {

}

// Se a consulta falhou
if (!$query) {
// A consulta foi mal sucedida, retorna false
$this->erro = 'A consulta dos dados é inválida. <br> Ocorreu um erro ao consulta no banco de dados.';
return false;
} else {

if (!($hash == $item['senha'])){
$this->erro = "A senha informada não confere!<br>Verifique se você digitou corretamente a sua senha.";
return false;
} else {
if ($item['situacao'] == 'I'){
$this -> erro = "Acesso negado ao sistema! Por favor, entre em contato com o suporte técnico.";
return false;
} else {
// Traz os dados encontrados para um array
$dados = pg_fetch_assoc($query);

// Limpa a consulta da memória
pg_free_result($query);

// Passa os dados para a sessão
foreach ($dados AS $chave=>$valor) {
$_SESSION[$this->prefixoChaves . $chave] = $valor;
}
}
}
}
}

// Usuário logado com sucesso
$_SESSION[$this->prefixoChaves . 'logado'] = true;

// Define um cookie para maior segurança?
if ($this->cookie) {
// Monta uma cookie com informações gerais sobre o usuário: usuario, ip e navegador
$valor = join('#', array($usuario, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));

// Encripta o valor do cookie
$valor = sha1($valor);

// Cria o cookie
setcookie($this->prefixoChaves . 'token', $valor, 0, $this->cookiePath);
}

// Salva os dados do usuário em cookies ("Lembrar minha senha")
if ($lembrar) $this->lembrarDados($usuario, $senha);

// Fim da verificação, retorna true
return true;

} else {
return false;
}
} else {
$this->erro = "Não foi possível conectar ao banco de dados. Se isso ocorrer novamente entre em contato com o suporte tecnico.";
return false;
}
}

/**
* Verifica se há um usuário logado no sistema
* @return boolean Se há um usuário logado
*/
function usuarioLogado($cookies = true) {
// Inicia a sessão
if ($this->iniciaSessao AND !isset($_SESSION)) {
session_start();
}

// Verifica se não existe o valor na sessão
if (!isset($_SESSION[$this->prefixoChaves . 'logado']) OR !$_SESSION[$this->prefixoChaves . 'logado']) {
// Verifica os dados salvos nos cookies
if ($cookies) {
// Se os dados forem válidos o usuário é logado automaticamente
return $this->verificaDadosLembrados();
} else {
// Não há usuário logado
$this->erro = 'Não há usuário logado';
return false;
}
}

// Faz a verificação do cookie
if ($this->cookie) {

// Verifica se o cookie não existe
if (!isset($_COOKIE[$this->prefixoChaves . 'token'])) {
$this->erro = 'Não há usuário logado';
return false;
} else {
// Monta o valor do cookie
$valor = join('#', array($_SESSION[$this->prefixoChaves . 'logado'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));

// Encripta o valor do cookie
$valor = sha1($valor);

// Verifica o valor do cookie
if ($_COOKIE[$this->prefixoChaves . 'token'] !== $valor) {
$this->erro = 'Não há usuário logado';
return false;
}
}
}

// A sessão e o cookie foram verificados, há um usuário logado
return true;
}

[/code]
barboza1979
Re: Problema ao verificar se usuario está logado
05 de August de 2014 às 11:24PM
estou tentando terminar meu TCC em análise e desenvolvimento de sistemas, contudo estou sofrendo com algumas funções e outras "cositas" mais no PHP...rsrsrsrsrs
não estou conseguindo fazer o usuário ficar logado com esse código abaixo (cai direto no ultimo $flash: "Ops! Digite seu Email e sua Senha corretamente!!!";), parece que o problema está no setcookie:

class Login{
public function logar($email,$senha){
$buscar = mysql_query("SELECT * FROM usuarios WHERE email='$email' AND senha='$senha' LIMIT 1");
if(mysql_num_rows($buscar) == 1){
$dados = mysql_fetch_array($buscar);
if($dados["ativo"] == 1){
$_SESSION["email"] = $dados["email"];
$_SESSION["senha"] = $dados["senha"];
$_SESSION["nivel"] = $dados["nivel"];
setcookie("logado",1);
$log = 1;
}else{
$flash = "Aguarde a nossa aprovação!";
}
}
if(isset($log)){
$flash = "Você foi logado com sucesso!";
}else{
if(empty($flash)){
$flash = "Ops! Digite seu Email e sua Senha corretamente!!!";
}
echo $flash;
}

}

}
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.