Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set multiple key-value pairs to one cookie?

I am using this line to set multiple key-value pair at once to one cookie

document.cookie="username=John Smith; test1=ew; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";

it seemed test1 is not set to the cookie successfully, because when I write document.cookie in the console, it didn't print this key-value pair. Anyone know how to set multiple key-value pair to ONE cookie?

like image 599
Blake Avatar asked Jul 21 '14 13:07

Blake


People also ask

Can one cookie have multiple values?

A cookie can contain only one “string” value in JavaScript, and storing multiple key-value pairs requires multiple cookies. However, using multiple cookies can also cause some problems.

How set multiple values in cookie in PHP?

php'; function setCookieData($arr) { $cookiedata = getAllCookieData(); if ($cookiedata == null) { $cookiedata = array(); } foreach ($arr as $name => $value) { $cookiedata[$name] = $value; } setcookie('cookiedata', serialize($cookiedata), time() + 30*24*60*60); } function getAllCookieData() { if (isset($_COOKIE[' ...

How many values can be stored in a cookie?

To comply with the standard, you should store no more than 4096 bytes per cookie.


2 Answers

It does not make sense to store multiple key-value pairs into one cookie, because by definition a cookie represents one key-value pair.

I believe you don't understand well how document.cookie works. It is not a standard JS string: when you set it, the cookie definition it contains is appended to the list of existing cookies. That is, you cannot set two cookies at the same time using this API.

You have two solutions:

  • Use a cookie for each key-value you want to store:

    document.cookie = "myCookie=myValue";
    document.cookie = "myOtherCookie=myOtherValue";
    
  • Store a single cookie with a custom serialization of your complex data, for example JSON:

    document.cookie = "myCookie=" + JSON.stringify({foo: 'bar', baz: 'poo'});
    
like image 111
zopieux Avatar answered Oct 09 '22 01:10

zopieux


Actually i think it would be better to use
document.cookie = "myCookie=foo='bar'&baz='poo'; here is the rest of cookie specifications if you like..."
as far as i know, it also is compatible with Asp and Asp.Mvc on server side:
string foo=Request.Cookies["myCookie"]["foo"]

like image 26
Rzassar Avatar answered Oct 09 '22 00:10

Rzassar