Ir para conteúdo

Arquivado

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

Diego Ferraz

Não consigo resgatar Cookie nas páginas.

Recommended Posts

O problema é que estou fazendo um sistema de login e senha com uma opção de manter conectado.

 

Porém eu seto os cookies mas não consigo recuperá-los em algumas páginas, em outras consigo normalmente.

 

Vou expor todo o código. A hierarquia das pastas está:

 

 

/adm

index.php

/classes

/home

index.php

/login

index.php

logar.php

 

 

o arquivo index.php na raiz da pasta faz a verificação pra ver se o usuário está logado ou não. Nesta página o cookie não funciona:

<?php 
require "classes/config.php";

if ( ($_SESSION[PREFIXO_SESSAO . '_logado']) || ($_COOKIE[PREFIXO_SESSAO . '_logado']) ) {
    
	header("Location: home/");		
	
} else {

	header("Location: login/");

}

o index da pasta login, se eu der um print. os cookies são listados normalmente.

<div id="login">
            <form id="form-login" method="post" action="logar.php">
                <label>Nome do usuario</label>
                <input type="text" id="usuario" name="usuario" />
                <label>Senha</label>
                <input type="password" name="senha" id="senha" />
                <input type="checkbox" name="manter" id="manter" value="1" /><label for="manter">Manter Conectado</label>
                <button type="submit" class="btnentrar blue" style="height:35px; width:100px;">Entrar</button>
            </form>
</div>
<?php print_r($_COOKIE); ?>

O arquivo logar.php

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] == "POST") {

	$usuario = $_POST['usuario'];
	$senha	 = $_POST['senha'];
	$manter	 = $_POST['manter'];	

	if (!empty($usuario) && !empty($senha)) {

		require_once ("../classes/Conexao.php");
		require_once ("../classes/Login.php");

		$Login = new Login();

		if ( $Login->logaUsuario($usuario, $senha, $manter) ) {
			
			header ("Location: ../home/");

		} else {
		
			$_SESSION['message'] = $Login->_erro;
			header ("Location: ../login/");

		}

	} else {

		$_SESSION['message'] = 4;
		header ("Location: ../login/");	

	}
	
}

E o método da classe que faz o login e também onde é setado os cookies:

	public function logaUsuario($usuario, $senha, $manter) {

		if ($this->validaUsuario($usuario)) {
		
			if ($this->validaStatus($usuario)) {
			
				if ($this->validaSenha($usuario, $senha)) {

						$Conexao = new Conexao();
						$pdo 	 = $Conexao->conectar();

						$sql = "SELECT * FROM usuarios WHERE usuarios_usuario = ?";

						try {

							$qry = $pdo->prepare($sql);
							$qry->bindParam(1, $usuario, PDO::PARAM_INT);	
							$qry->execute();
							$dado = $qry->fetch(PDO::FETCH_OBJ);

							// CRIANDO DADOS DE SESSÃO
							session_start();
							$_SESSION[$this->_prefixoSessao . '_id']   	 = $dado->usuarios_id;
							$_SESSION[$this->_prefixoSessao . '_logado'] = true;

							// CRIANDO DADOS DE COOKIES
							if ($manter==1) {

								setcookie($this->_prefixoSessao . '_id', $dado->usuarios_id, time()+60*60*24*$this->_tempoCookie);
								setcookie($this->_prefixoSessao . '_logado', true, time()+60*60*24*$this->_tempoCookie);

							} else {

								setcookie($this->_prefixoSessao . '_id', "", time() - 3600);
								setcookie($this->_prefixoSessao . '_logado', "", time() - 3600);

							}
							
							return true;	

						} catch (PDOException $e) {
							
							echo $e->getMessage();

						}
						
				} else {
					
					$this->_erro = 3;
					return false;
					
				}

			} else {
					
				$this->_erro = 2;
				return false;
					
			}

		} else {
					
				$this->_erro = 1;	
				return false;
					
		}
				
	}

Está tudo funcionando normal, o usuario e senha são validados, em caso verdadeiro as sessões e cookies são setados e o usuario é direcionado para a página index.php da pasta home.

 

 

Porém nesta página, não consigo resgatar os cookies com $_COOKIE[PREFIXO_SESSAO . '_id' ] ou até mesmo se eu der um print_r eles também não aparecem.

 

Alguma ideia do porque algumas páginas funcionam e outras não?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O quarto parametro da função setcookie é a pasta, se você omitir ele vai assumir a pasta da requisição atual.

 

http://php.net/manual/pt_BR/function.setcookie.php

 

se você quer que o cookie esteja disponível para o síte inteiro você deve passar o path como "/",

 

por exemplo:

 

 

setcookie($name, $value, $expire, '/');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também me ajudou a solução acima, mas como fazer para remover.

 

Pois ao remover, umas páginas dizem que não existe, outras aparece o cookie normal.

 

Como faço para eliminar definitivamente o Cookie?

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.