Ir para conteúdo

Arquivado

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

terra

Salvar conteudo de uma session em cookie

Recommended Posts

olá,

 

Salvar conteudo de uma session em cookie, estou tentando fazer isso mas sem sucesso.

 

Alguém pode dar uma ajuda se possível com exemplo?

 

 

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom na verdade o valor da session ja fica armazenado em um cookie.

Mais caso queira armazenar ela um cookie para recuperar mesmo que o usuario feche o browser é bem simples.

 

Para armazenar

session_start();
$_SESSION['minha_session'] = 'valor da session';//Sua variavel de session
setcookie('seu_cookie',$_SESSION['minha_session']);// aramazena no cookie

 

Para recuperar

 

if(isset($_COOKIE['seu_cookie'])){
$_COOKIE['seu_cookie'];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo,

 

obrigado pela resposta, entendi e deu certo. Agora eu fazer um foreach nesse cookie, fiz assim e não esta funcionando

 

 

 

 

if(isset($_COOKIE['lista'])){
foreach($_COOKIE['lista'] as $id => $value)
{
$id2 = $_COOKIE['lista'];

 

 

assim funciona mas somente mostra um item

 

if(isset($_COOKIE['lista'])){
$_COOKIE['lista'];
$id2 = $_COOKIE['lista'];

 

Com session o foreach funciona

 

 

 

 

($_SESSION && $_SESSION['minhalista'] != null){
foreach($_SESSION['minhalista'] as $key => $value)
{
$id = $_SESSION['minhalista'][$key];

 

 

valeu pela ajuda, se puder me ajude nessa duvida também

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Com certeza você armazenou um array na session "minhalista", por isso o "foreach" funciona.

Para gravar um array em um cookie, utilize "serialize" e "userialize". Segue um exemplo:

 

//gravando array "aIds" no cookie:
$aIds = array(1,2,5,7);
setcookie('cookie', serialize($aIds), time()+3600);

 

Para recuperar o array gravado no cookie, faça o seguinte:

$data = userialize($_COOKIE['cookie']);
echo $data[0]; //posição 0 do array aIds gravado no cookie

 

A função serialize na prática converte um objeto em uma string, a função userialize faz o inverso.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, sem foreach mostra apenas um item de 10 armazenado no cookie / session

 

 

 

valeu

Vc utilizou a função "serialize" passando como parâmetro a sua session?

Veja o exemplo no post #5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá,

 

acho que não conseguindo pegar o fio da meada, veja. Crio a session e o cookie assim

 

 

 

 

session_start();
$id = $_POST['id'];
if( isset( $_POST['acao'] ) && $_POST['acao'] == "add" ){
$_SESSION["minhalista"][$id] = $_POST['id'];
setcookie('lista',$_SESSION['minhalista'][$id]);// aramazena no cooki
}else if( isset( $_POST['acao'] ) && $_POST['acao'] == "del" ){
unset($_SESSION["minhalista"][$id]);
}

 

e no php assim

 

 

 

if(isset($_COOKIE['lista'])){
$_COOKIE['lista'];
//$_COOKIE['lista'];
$id2 = $_COOKIE['lista'];
/*if ($_SESSION && $_SESSION['minhalista'] != null){
foreach($_SESSION['minhalista'] as $key => $value)
{
$id = $_SESSION['minhalista'][$key]; */
$sel = mysql_query("SELECT * FROM city as c , classificados as cla WHERE id = '".$id2."' and c.city_id=cla.city_id");
while($row = mysql_fetch_array($sel)){
//$_COOKIE['lista'];
$rows[] = $row;
}
}

 

e no TPL assim

 

 

{foreach from=$rows item=row}

com session funciona sem problemas, mas com cookie não ou melhor so mostra um item mesmo tendo 100.

 

Não entendi bem esse exemplo

 

seria assim?

 

 

 

 

//gravando array "aIds" no cookie: $aIds = array(1,2,5,7); //aqui chamo a session minha lista?setcookie('cookie', serialize($aIds), time()+3600);

 

e aqui

 

 

$d= userialize($_COOKIE['cookie']); //chamar no select?

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro você precisa entender como o comando foreach funciona.

Ele apenas funciona com um array ou objeto.

No cookie apenas gravamos strings, por isso o foreach não funciona com string.

 

 

Veja se entendi: na session "minhalista" ($_SESSION['minhalista']) você está gravando todos os itens selecionados pelo utilizador, certo?

O conteúdo dessa session é um array, certo?

Antes de gravar essa session no cookie, você precisa converte-la em string (de array para string), porque não se grava um objeto no cookie e sim strings, certo?

 

No seu exemplo, você apenas grava um item da session, veja:

 

setcookie('lista',$_SESSION['minhalista'][$id]);

 

Faça o seguinte, procure o cookie que foi gerado e veja o seu conteúdo.

Se não souber, procure no google de acordo com o seu browser, todos possuem esse recurso.

 

Se entendi bem o que vc precisa, veja como ficaria:

setcookie('lista',serialize($_SESSION['minhalista']));

 

 

Aqui estou a converter o seu array em uma string para ser gravado no cookie todas as posições.

Após fazer essa mudança, abra novamente o seu cookie e veja a diferença.

 

O que fiz no exemplo acima foi converter o conteúdo da sua session, que é um array, em string, assim todos as posições serão gravadas no cookie, porque irá em forma de string.

Para converter essa string em um array novamente, utilize a função "userialize".

 

Desculpe se não fui muito claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

obrigado pela paciência.

 

Então, fiz as alterações e o conteudo do cookie alterou de, por exemplo, 256 para N%3B

 

so que na pagina que chamo o cookie não mostra nada

 

 

$data =unserialize($_COOKIE['lista']);
echo $data[0]; //posição 0 do array aIds gravado no cookie
eu fiz assim

 

 

session_start();
$id = $_POST['id'];
if( isset( $_POST['acao'] ) && $_POST['acao'] == "add" ){
$_SESSION["minhalista"][$id] = $_POST['id'];
setcookie('lista',serialize($_SESSION['minhalista'][$id],time()+3600));
//setcookie('lista',$_SESSION['minhalista'][$id],time()+3600);// aramazena no cookie
}else if( isset( $_POST['acao'] ) && $_POST['acao'] == "del" ){
unset($_SESSION["minhalista"][$id]);
}

e mostrou isso no coookie

 

 

a%3A6%3A%7Bi%3A256%3Bs%3A3%3A%22256%22%3Bi%3A257%3Bs%3A3%3A%22257%22%3Bi%3A66%3Bs%3A2%3A%2266%22%3Bi%3A209%3Bs%3A3%3A%22209%22%3Bi%3A269%3Bs%3A3%3A%22269%22%3Bi%3A270%3Bs%3A3%3A%22270%22%3B%7D

 

alterei a chamada do cookie para

 

 

if(isset($_COOKIE['lista'])){
$_COOKIE['lista'];
//$_COOKIE['lista'];
$id2 = unserialize($_COOKIE['lista']);
/*if ($_SESSION && $_SESSION['minhalista'] != null){
foreach($_SESSION['minhalista'] as $key => $value)
{
$id = $_SESSION['minhalista'][$key]; */
$sel = mysql_query("SELECT * FROM city as c , classificados as cla WHERE id = '".$id2."' and c.city_id=cla.city_id");
while($row = mysql_fetch_array($sel)){
//$_COOKIE['lista'];
$rows[] = $row;
}
}

mas mesmo assim não mostrou nada.

 

o que estou fazendo errado? tudo?

 

se eu tiro o unserialize, mostra assim

 

 

 

a:7:{i:256;s:3:\"256\";i:257;s:3:\"257\";i:66;s:2:\"66\";i:209;s:3:\"209\";i:269;s:3:\"269\";i:270;s:3:\"270\";i:68;s:2:\"68\";}

 

 

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá terra, você errou ao utilizar a função serialize, veja como ficaria o codigo:

session_start();
$id = $_POST['id'];
 
if( isset( $_POST['acao'] ) && $_POST['acao'] == "add" ){
  $_SESSION["minhalista"][$id] = $_POST['id'];
  //setcookie('lista',serialize($_SESSION['minhalista'][$id],time()+3600)); //errado
  unset($_COOKIE['lista']); 
  setcookie('lista',serialize($_SESSION['minhalista']),time()+3600); //certo
}else if( isset( $_POST['acao'] ) && $_POST['acao'] == "del" ){
  unset($_SESSION["minhalista"][$id]);
}

 

Bom, o conteúdo da sua session é um array, quando você faz "$_SESSION["minhalista"][$id] = $_POST['id'];", você está adicionando uma nova posição ao array, ou se já existir está atualizando o valor.

Como referi, nós devemos gravar apenas string no cookie, então necessitamos de usar a função serialize para converter o array em uma string.

 

Vamos ao segundo código.

A função unserialize converte a string em um array novamente, então o que vc precisa fazer é reconstruir a sua session com os valores armazenados no cookie utilizando a função unserialize. Veja abaixo:

 

if(isset($_COOKIE['lista'])){
    //$_COOKIE['lista']; 
    //$id2 = unserialize($_COOKIE['lista']);
    $_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
    ....

 

Corrigindo todo o codigo, ficaria assim:

if(isset($_COOKIE['lista'])){
    $_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
    foreach($_SESSION['minhalista'] as $key => $value){ 
       $id = $_SESSION['minhalista'][$key];
       $sel = mysql_query("SELECT * FROM city as c , classificados as cla WHERE id = '".$id."' and c.city_id=cla.city_id"); 
   
       while($row = mysql_fetch_array($sel)){ 
          //$_COOKIE['lista'];
          $rows[] = $row; 
       }
   }
}

Veja se percebeu agora a utilização das funções serialize e unserialize.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Filipe, obrigado.

 

Mas não funcionou com cookie, cria o cookie mas não mostra.

 

 

 

a%3A1%3A%7Bi%3A257%3Bs%3A3%3A%22257%22%3B%7D

 

fiz varias alterações no codigo que passou mas nada, não mostra. Tentei no Firefox tb e nada, eu uso o Chrome.

 

 

 

Valeu mesmo a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Na minha máquina funcionou sem problemas.

Vamos mais uma tentativa, se não funcionar posta o código inteiro para dar uma olha e perceber o contexto.

 

No primeiro código, comente a linha:

unset($_COOKIE['lista']); 

 

 

No segundo código, na parte onde você recupera o cookie, comente tudo e copie esse codigo:

 

if(isset($_COOKIE['lista'])){
    $_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
    echo "print de um item do array: ".$_SESSION['minhalista'][X];
    // no X acima ($_SESSION['minhalista'][X]) troque por um id que vc adicionou ao array.
}else{
   echo "não encontrou o cookie";
}

 

Tenha atenção no "X" acima ($_SESSION['minhalista'][X]) troque o X por um id que vc adicionou ao array.

 

Veja se vai aparecer algo na tela do tipo: "print de um item do array: 180" onde 180 é o id do item inserido no array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

a resposta: print de um item do array:

 

não mostrou o cookie 261

 

 

a%3A1%3A%7Bi%3A261%3Bs%3A3%3A%22261%22%3B%7D

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá,

 

veja, eu mudei, setei a pasta root "/"

 

 

 

setcookie(lista,serialize($_SESSION['minhalista'],"/"),time()+3600); //certo

 

e retirei o unserialize, veja

 

 

 

if(isset($_COOKIE['lista'])){
$_SESSION['minhalista'] = $_COOKIE['lista'];
echo "print de um item do array: ".$_SESSION['minhalista'];
// no X acima ($_SESSION['minhalista'][X]) troque por um id que você adicionou ao array.
}else{
echo "não encontrou o cookie";
}

e mostrou

 

 

print de um item do array: a:2:{i:261;s:3:\"261\";i:260;s:3:\"260\";}

mas continua sem mostrar o itens, até tentei retirando unserialize aqui tb mas não adiantou

 

 

 

if(isset($_COOKIE['lista'])){
$_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
foreach($_SESSION['minhalista'] as $key => $value){
$id = $_SESSION['minhalista'][$key];
$sel = mysql_query("SELECT * FROM city as c , classificados as cla WHERE business_id = '".$id."' and c.city_id=cla.city_id");
while($row = mysql_fetch_array($sel)){
//$_COOKIE['lista'];
$rows[] = $row;
}
}
}

 

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Você não pode fazer isso:

$_SESSION['minhalista'] = $_COOKIE['lista'];

 

É necessário converter a string armazenada no cookie em array, utilizando a função unserialize.

Está correto quando o sistema grava assim no cookie, isso é seu array em forma de string:

 

a:2:{i:261;s:3:\"261\";i:260;s:3:\"260\";}

 

 

Ao fazer "$_SESSION['minhalista'] = $_COOKIE['lista'];" você faz com que sua session seja uma string e na logica que você pensou isso não irá funcionar porque você necessita de um array.

 

Ao fazer "unserialize" do conteúdo do cookie que você postou, a função irá converter para um array com o valor 260 e 261, portanto esses 2 itens ficaram gravados no cookie, até aqui da para perceber que funcionou.

 

Faça assim, selecione novamente o item 260 e 261 e veja que irá imprimir todos os itens armazenados no cookie:

 

if(isset($_COOKIE['lista'])){
    $_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
    foreach($_SESSION['minhalista'] as $key){ 
      echo "Item:".$_SESSION['minhalista'][$key]."<br/>";
    }
}else{
   echo "não encontrou o cookie";
}

 

 

O problema é outro porque já percebi que grava sim os valores no cookie.

 

Teste o código acima e verás que afinal estamos gravando todos os itens no cookie e que o problema não está em recuperar esses valores gravados. Deve aparecer o seguinte na sua tela:


 

item: 261
item: 260

 

 

 

Aguardo sua resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Filipe,

 

então, quando tem o cookie não mostra nada e quando deleto o cookie mostra "não encontrou o cookie."

Outra coisa esta substituindo o cookie e não acrescendo + 1.

 

o que pode estar ocorrendo?

 

com session funciona perfeito

 

vai todos os passos

 

grava.php

 

 

session_start();
$id = $_POST['id'];
if( isset( $_POST['acao'] ) && $_POST['acao'] == "add" ){
$_SESSION["minhalista"][$id] = $_POST['id'];
//setcookie('lista',serialize($_SESSION['minhalista'][$id],time()+3600)); //errado
//unset($_COOKIE['lista']);
setcookie('lista',serialize($_SESSION['minhalista']),time()+3600); //certo
}else if( isset( $_POST['acao'] ) && $_POST['acao'] == "del" ){
unset($_SESSION["minhalista"][$id]);
}

 

lista.php

 

 

 

 


if(isset($_COOKIE['lista'])){
$_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
foreach($_SESSION['minhalista'] as $key => $value){
$id = $_SESSION['minhalista'][$key];
$sel = mysql_query("SELECT * FROM city as c , classificados as cla WHERE id = '".$id."' and c.city_id=cla.city_id");
while($row = mysql_fetch_array($sel)){
//$_COOKIE['lista'];
$rows[] = $row;
}
}
}

 

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, posta o código inteiro para dar uma olhada.

 

 

 

então, quando tem o cookie não mostra nada e quando deleto o cookie mostra "não encontrou o cookie."

Outra coisa, não mostra nada mas existe conteúdo dentro do cookie, certo? (vc chegou a postar o conteúdo, dessa fez tinha conteúdo também?).

 

Você fez exatamente como postei, assim:

if(isset($_COOKIE['lista'])){
    $_SESSION['minhalista'] = unserialize($_COOKIE['lista']);
    foreach($_SESSION['minhalista'] as $key){ 
      echo "Item:".$_SESSION['minhalista'][$key]."<br/>";
    }
}else{
   echo "não encontrou o cookie";
}

 

 

 

 

Outra coisa esta substituindo o cookie e não acrescendo + 1.

Em relação ao cookie, quando você faz setcookie, informa o conteúdo a gravar no cookie, logo irá substituir todo o conteúdo anterior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Filipe,

 

esta tudo igualzinho (crtl c crtl v) que vc me orientou.

 

 

 

a%3A1%3A%7Bi%3A267%3Bs%3A3%3A%22267%22%3B%7D

 

 

Terra

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.