Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
Carregando comentários...