2010-04-22 17 views
6

Sto tentando di memorizzare array annidati in un cookie. Ho deciso di memorizzare l'array come stringa JSON. Tuttavia, ricevo questo avviso:Archiviazione di matrici annidate in un cookie

PHP Attenzione: i valori dei cookie non possono contenere nessuno dei seguenti ',; \ t \ r \ n \ 013 \ 014 'in foobar.php

C'è un modo consigliato di memorizzare gli array annidati in un cookie?

+0

Per curiosità, perché è necessario archiviare tanti dati in un cookie? –

+0

Un sacco di ipotesi in corso qui (a giudicare da alcune delle risposte/feedback) ... Il fatto che sia un array annidato non implica necessariamente molti dati. Innanzitutto, la profondità massima di annidamento è probabilmente <= 3. In secondo luogo, sto solo memorizzando gli oggetti object (interi). – morpheous

risposta

3

Si potrebbe utilizzare base64_encode() e base64_decode()

Si noti che secondo il manuale:

dati con codifica Base64 prende circa il 33% più di spazio rispetto ai dati originali.

+0

Questo sembra funzionare per me. – morpheous

+0

Ricorda che javascript base64 decode non è interamente cross-browser http://stackoverflow.com/questions/2820249/base64-encoding-and-decoding-in-client-side-javascript –

1

non credo che sia un modo pulito per farlo, ma si potrebbe urlencode la stringa json_encode d per essere in grado di memorizzare in un cookie.

Modifica: Tom Haigh è sicuramente più pulito (utilizzando base64_encode).

+0

Questo è un approccio comune. 'rawurlencode' potrebbe essere una scommessa migliore se vuoi leggere il cookie da altrove, ad es. JavaScript 'decodeURIComponent'. – bobince

0
$array = array(); 
$array[] = array(1,2,3); 
$array[] = array('a','b','c'); 
setcookie("test",serialize($array)); 

Basta serializzare, funziona bene.

si ottiene che nel cookie:

'test' => string 'a:2:{i:0;a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}i:1;a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}}' (length=86) 
+3

il pericolo di ciò è che tu stai annullando la serializzazione dei dati inviati dall'utente, che è potenzialmente pericoloso poiché passando una stringa diversa le persone possono creare istanze di oggetti arbitrari, ecc. –

+0

Totalmente d'accordo. Non molto sicuro, dipende solo dal tipo di dati memorizzati in quel cookie. Se è ragionevole, puoi offuscare/cifrarlo con una chiave privata. – Mikushi

+1

Anche questo sembra avere un sacco di punto e virgola, il che sicuramente causerebbe il fallimento di "Set-Cookie"? – bobince

2

Se avete qualche altra forma di persistenza disponibili (db, sessioni, memcache), io consiglierei di memorizzare i dati reali lì. Quindi inserisci un identificatore univoco nel cookie, che può essere utilizzato per cercare i dati desiderati. È molto più pulito e sicuro.

2

C'è un modo consigliato di memorizzare gli array annidati in un cookie?

Sì, no. Memorizzarlo su server utilizzando una sessione o un altro handle. Non solo ci sono problemi di formattazione e portata con l'archiviazione dei dati nei cookie, c'è anche un limite di dimensione del file.

C.

Problemi correlati