Array
(
)

Verificar se usuário está logado não confere.

PHP
Adenesjr
   - 21 jul 2014

Estou com um problema de reconhecer se o usuário está logado, quando mudo de página verifico se o usuário está logado.
Uso um método para criar uma sessão e um cookie para melhor segurança. Logo tranquilamente, 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.
#Código

//método loga usuario

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

.

.

.

                // 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);
                }
}

//método que verifica se o usuario está logado ( onde não estou conseguindo )

        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 {                   
                    // o problema está aqui

                    // 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;
        }