2010-04-22 13 views
6

Estoy tratando de almacenar matrices anidadas en una cookie. Decidí almacenar la matriz como una cadena JSON. Sin embargo, recibo esta advertencia:Almacenamiento de matrices anidadas en una cookie

Advertencia de PHP: los valores de las cookies no pueden contener ninguno de los siguientes ',; \ t \ r \ n \ 013 \ 014 'en foobar.php

¿Hay alguna manera recomendada de almacenar matrices anidadas en una cookie?

+0

Por curiosidad, ¿por qué necesita almacenar esa cantidad de datos en una cookie? –

+0

Una gran cantidad de suposiciones aquí (a juzgar por algunas de las respuestas/comentarios) ... El hecho de que es una matriz anidada no implica necesariamente una gran cantidad de datos. En primer lugar, es probable que la profundidad máxima de anidamiento sea <= 3. En segundo lugar, solo estoy almacenando identificadores de objetos (enteros). – morpheous

Respuesta

3

Usted podría utilizar base64_encode() y base64_decode()

Tenga en cuenta que de acuerdo con el manual:

datos codificados en Base64 toma alrededor de 33% más espacio que los datos originales.

+0

Esto parece funcionar para mí. – morpheous

+0

Tenga en cuenta que la decodificación javascript base64 no es completamente entre navegadores http://stackoverflow.com/questions/2820249/base64-encoding-and-decoding-in-client-side-javascript –

1

no creo que es una manera limpia de hacerlo, pero que podría urlencode la cadena json_encode d para poder almacenarlo en una cookie.

Edición: Tom Haigh es ciertamente más limpio (usando base64_encode).

+0

Este es un enfoque común. 'rawurlencode' podría ser una mejor opción si quieres leer la cookie de otro lado, ej. 'DecodeURIComponent' de JavaScript. – bobince

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

Just serialize, funciona bien.

, tienes el de la 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

el peligro de esto es que luego está deserializando los datos enviados por el usuario, lo cual es potencialmente peligroso ya que al pasar una cadena diferente, las personas podrían instanciar objetos arbitrarios, etc. –

+0

Totalmente de acuerdo con eso. No es muy seguro, solo depende de qué tipo de datos almacene en esa cookie. Si es sensato, puede ofuscarlo/encriptarlo con una clave privada. – Mikushi

+1

También parece que tiene un montón de puntos y comas, lo que seguramente causaría que 'Set-Cookie' fallara? – bobince

2

Si tienes alguna otra forma de persistencia disponibles (db, sesiones, Memcache), me gustaría recomendar el almacenamiento de los datos reales allí. Luego coloque un identificador único en la cookie, que se puede usar para buscar los datos deseados. Es mucho más limpio y más seguro.

2

¿Existe alguna forma recomendada de almacenar matrices anidadas en una cookie?

Sí - no. Guárdelo en el servidor usando una sesión u otro identificador. No solo hay problemas de formateo y alcance con el almacenamiento de datos en las cookies, también hay un límite de tamaño de archivo.

C.

Cuestiones relacionadas