terra 1 Denunciar post Postado Março 16, 2013 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
Ricardo Saraiva 84 Denunciar post Postado Março 16, 2013 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
terra 1 Denunciar post Postado Março 17, 2013 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
Ricardo Saraiva 84 Denunciar post Postado Março 17, 2013 cara não entedi sua duvida. E tambem me explica melhor o por que você você precisa do foreach? Compartilhar este post Link para o post Compartilhar em outros sites
Filipe_Moraes 15 Denunciar post Postado Março 17, 2013 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
terra 1 Denunciar post Postado Março 17, 2013 Então, sem foreach mostra apenas um item de 10 armazenado no cookie / session valeu Compartilhar este post Link para o post Compartilhar em outros sites
Filipe_Moraes 15 Denunciar post Postado Março 17, 2013 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
terra 1 Denunciar post Postado Março 17, 2013 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
Filipe_Moraes 15 Denunciar post Postado Março 17, 2013 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
terra 1 Denunciar post Postado Março 17, 2013 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
Filipe_Moraes 15 Denunciar post Postado Março 17, 2013 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
terra 1 Denunciar post Postado Março 17, 2013 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
Filipe_Moraes 15 Denunciar post Postado Março 17, 2013 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
terra 1 Denunciar post Postado Março 18, 2013 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
terra 1 Denunciar post Postado Março 18, 2013 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
Filipe_Moraes 15 Denunciar post Postado Março 18, 2013 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
terra 1 Denunciar post Postado Março 18, 2013 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
Filipe_Moraes 15 Denunciar post Postado Março 18, 2013 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
terra 1 Denunciar post Postado Março 18, 2013 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
Filipe_Moraes 15 Denunciar post Postado Março 18, 2013 Posta o código inteiro para dar uma olhada. Compartilhar este post Link para o post Compartilhar em outros sites