Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Cookie

Senhores, boa tarde!

Eu estou trabalhando com cookies e tenho uma dificuldade.

Minha aplicação vem crescendo conforme o desenvolvimento do curso. Eu estou realizado varias transferencias de dados atráves do comando header location.

A questão é que devido o volume de paginas eu tenho que setar o cookie em todas elas, segue um exemplo:

Index.php

<form action="usuario/login.php" method="post">
      <div>
        <label for="email">Email</label>
        <input type="text" name="email" id="email">
        <label for="senha">Senha</label>
        <input type="password" name="senha" id="senha">
        <button type="submit">Acessar</button>
      </div>
      <a href="usuario/form.php">Novo Usuário</a>
    </form>

Nesse trecho eu envio o usuário para menu.php através do header location.

<?php 
  include("../banco/conecta.php");
  include("banco.php");
  $conexao = conexao();     
  $usuarioDisponivel = buscaUsuario($conexao, $_POST['email'], $_POST['senha']);     

  if(isset($usuarioDisponivel)) {                        
    $usuario = $usuarioDisponivel['email'];
    header("Location: ../menu/menu.php?login=true?user=$usuario");      
    die();    
  }else{
    echo "Usuário não possui cadastro ou senha incorreta."."<br>";     
  }  
  ?>

No menu.php eu estou gravando o cookie. E faço o envio para o formulário de cadastro de form.php.

function pega_usuario($url){
    $usuario = substr($url, 10, strlen($url));
    return $usuario;
  }

  if(array_key_exists("login", $_GET)) {                      
    $usuario = pega_usuario($_GET['login']);
    setcookie("usuarioLogado", $usuario, time() + 600);
    vaParaMenu($usuario);  

  }else if(isset($_COOKIE['usuarioLogado'])) {                
     setcookie("usuarioLogado", $_COOKIE['usuarioLogado'], time() + 600);
     vaParaMenu($_COOKIE['usuarioLogado']);
  }else{
    echo "Sua sessão expirou!";
  } 
  ?>  
<?php                  
  function vaParaMenu($usuario) { ?>          
    <nav>
      <ul>
        <li>
          <form action="../marca/form.php" method="post">
            <input type="hidden" name="usuario" value=<?= $usuario?> id="usuario">
            <a href="../marca/form.php"><button type="submit">Marca</button></a>
          </form> 
        </li>
      </ul>
    </nav>
 <?php }

Este é o formulario citado anteriormente

<?php        

   $usuario = "";

   function pegaUsuario($usuario){
     return substr($usuario, 10, strlen($usuario));       
   }

   if(isset($_POST['usuario']) != null) {     
     $usuario = $_POST['usuario'];
     setcookie("usuarioLogado", $usuario, time() + 600); 
   }else if(array_key_exists("return", $_GET)){
     $usuario = pegaUsuario($_GET['return']);
     setcookie("usuarioLogado", $usuario);
     echo "Marca cadastrada com sucesso!";
   }     

  ?>

Como você pode observar para cada página eu tenho que gravar o cookie, eu observei que quando uso o header location se eu não enviar o usuário via header location eu não tenho como efetuar a gravação do cookie na resquest seguinte.

Eu gostaria de gravar o cookie apenas uma unica vez em uma variavel global e movimenta-lo somente se necessário.

Obrigado.

2 respostas
solução!

Oi Leandro, tudo bom?

Realmente, cookies podem ser um pouco problematicos para transferencias entre requests.

Para isso, eu recomendo você dar uma olhada na $_SESSION do php.

Armazenar dados na sesssão é bem comum para esse proposito.

Um exemplo, é quando queremos armazenar dados de um usuario logado em um sistema.

Abraço.

Oi André. Blz e você?

Obrigado pela dica eu estudei sobre a session é exatamente o que eu estava precisando.

Obrigado!