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]