2012-03-27 1 views
1

Comment stocker une grande chaîne JSON dans un cookie? Je dois utiliser le cookie seulement, la session n'est pas une option dans mon cas. Quelqu'un peut-il publier un exemple de code pour compresser une chaîne et la stocker dans un cookie, puis l'extraire avec succès. Merci.Comment stocker une grande chaîne JSON dans un cookie en utilisant PHP

+0

Avez-vous lu http://php.net/manual/fr/features.cookies.php? – Jon

+0

oui, j'ai lu ça. – Dev

+0

Jetez un oeil à http://stackoverflow.com/questions/4225030/jquery-save-jeux-data-object-in-cookie – NAVEED

Répondre

3

La compression des données ne semble pas être une bonne idée. Au contraire, je le garde dans une base de données et ne stocke que l'ID de l'entrée de la base de données dans un cookie. Cela empêcherait également les gens d'altérer les données, bien que l'altération de l'identifiant soit toujours possible. Utiliser des sessions serait mieux et éliminer cela.

Cependant, si vous insistez sur le stockage des données dans un cookie, vous pouvez compresser les données à l'aide gzcompress(), gzdeflate() ou gzencode(). Ceux-ci offrent tous une compression. gzdeflate() serait le meilleur choix pour votre problème, vu qu'il est le plus efficace dans l'espace.

$compressedJSON = gzdeflate($json, 9); 
setcookie('json', $compressedJSON); 

Et pour le lire

$compressedJSON = $_COOKIE['json']; 
$json = gzinflate($compressedJSON); 

Gardez à l'esprit que même si la compression sera suffisant pour vos données pour rester dans la limite de 4 Ko, vous pourriez éventuellement dépasser que, si le montant de JSON les données dont vous avez besoin sont stockées.

Je vous suggère toujours d'utiliser une base de données à la place.

+0

Notez que pour utiliser la fonction gz *, l'extension zlib doit être activée, par défaut elle ne l'est pas (sur les machines autres que Windows). –

+0

Le stockage de telles données dans DB est la meilleure suggestion, thnx. – Dev

0

Quelque chose comme ça?

Encode

$sJSON = json_encode($sSomeJSONData); 
setcookie('json', $sJSON); 

Decode

$sJSON = json_decode($_COOKIE['json']); 

--- EDIT ----

Go avec la réponse de Kristian pour l'utilisation de gzip ou une base de données, il est plus logique ... MAIS si vous ne pouvez pas utiliser une base de données, vous pouvez créer la session manuellement.

Toute une session est, techniquement, un fichier texte stocké en dehors de l'arborescence contenant des données. Vous pouvez dupliquer ce processus en utilisant quelque chose comme uniqid() pour générer un "nom de session".

Créez un fichier texte, dans un répertoire donné, en utilisant ce "nom de session" comme nom de fichier et stockez le "nom de session" dans votre cookie.

Ensuite, il suffit d'utiliser serialize(), unserialize() et file_put_contents(), file_get_contents() pour transférer vos données entre votre programme et votre fichier texte, en utilisant les données dans le cookie pour trouver le fichier texte.

Il faudrait des vérifications de sécurité et de prévention des détournements, mais le principe est le son.

+0

J'ai besoin de compresser une chaîne JSON avant cela. La chaîne JSON est trop longue. – Dev

+0

Il y a une limite de 4 Ko pour l'ensemble du cookie, y compris le nom, la valeur, la date d'expiration, etc. Je pense que @dev demande comment stocker une donnée dans le cookie si les données dépassent cette limite. – marvin

+0

@marvin: super! tu es presque là. Je cherchais une solution pour compresser les données et les stocker dans un cookie. Mais si quelqu'un peut poster un message similaire (par exemple en utilisant plusieurs cookies), je serai reconnaissant. – Dev

0

Si vos informations sont trop volumineuses, vous pouvez utiliser le stockage local à la place. Tous les navigateurs ne prennent pas en charge le stockage local, mais tous les navigateurs modernes le font. Si votre cookie est trop grand, vous courez le risque d'obtenir une erreur HTTP 431.

Donc, vous n'avez pas de problèmes de taille, et vous n'avez pas besoin de passer un grand cookie à chaque requête, vous devriez juste stocker un identifiant unique dans le cookie. Vous pouvez ensuite récupérer le grand objet de données à partir de memcache, mysql ou de tout autre stockage côté serveur en utilisant l'identifiant unique.Aucune session requise.

+0

pourriez-vous me dire combien grand coolie pouvons-nous stocker .... pouvons-nous stocker le cookie comme 500 mots? – StaticVariable

+0

Un cookie peut aller jusqu'à 4K. C'est tout le cookie (métadonnées + données). Si vous êtes proche de cela et que vous devez stocker des éléments localement, vous devez utiliser le stockage local. Tous les navigateurs modernes le supportent. –

Questions connexes