I have a requirement to store a large amount of data in cookies, to figure out if it will work
here are my tests.
If all you care about is the conclusion, well here it is: If you want to support most browsers, then don't exceed 50 cookies per domain, and don't exceed 4093 bytes per domain (i.e. total size of all cookies <= 4093 bytes)
Max Cookie Count Per Domain is calculated by adding cookies until the number of cookies saved stops increasing.
Max Cookie Size Per Cookie is calculated by increasing the cookies value one character at a time, until the saved value is truncated.
Max Cookie Size Per Domain is guessed by adding cookies of maximum size, until no more cookies can be added.
Hence, the actual limit may be more than the guessed limit. Guessed Limit <= Actual Limit < Guessed Limit + Max CookieSize
Manually Execute Tests
1. Max Cookies Test
Each cookie will be filled with the following character, repeated the specified number of times.
Character: Repeat Character Times:
Cookies are stored as a single string containing name, value, expiry etc.
Size limits apply to the entire cookie, not just its value.
If you use characters only in the ASCII range, each character takes 1 byte, so you can typically store 4096 characters
In UTF-8 some characters are more than 1 byte, hence you can not store as many characters in the same amount of bytes.
The ';' character is reserved as a separator. Do not use it in the key or value.
jQuery Cookie plugin stores the cookie using encodeURIComponent. Hence ÿ is stored as %C3%BF, 6 characters. This works well, as other you would lose the ';' character
You cannot delete cookies with a key that hits the size limit and has a small value. The method to delete a cookie is to set its expiry value, but when the key is large there is not enough room left to do this. Hence I have not tested limitations around key size.
It appears that some browsers limit by bytes, while others limit the number of characters.
jStorage is quite a good alternative that I am considering using. It stores the data on the client only (ie not sent to server) and is supported by the major browsers.
Just store an id in the cookie, and then store the data in a database
Appears same as Safari. Verified on Safari Mobile 7.
1 NA means there is no limit other than Max Cookies * Max Size Per Cookie 2 From January 2015 W3 Schools Browser Statistics 3 Lu pointed out Safari on mac is different to windows. It appears to have no limit. I will investigate when I get more time. 4 Deeman has shared these Safari Mac results in the comments below. 5 Safari on my iPad 3 iOS 5.1 has a limit of 4096 bytes, but an overhead of 3 bytes per cookie. Hence the max for 1 cookie is 4093, and I can fit 512 cookie of 5 bytes as 512*(5+3)=4096.
Conclusion
If you want to support most browsers, then don't exceed 50 cookies per domain, and don't exceed 4093** bytes per domain (i.e. total size of all cookies <= 4093 bytes).
** I previously said 4095 bytes to account for IE7, but now iPad 3 appears to come in a little lower.
By Iain Roberts. Created 02 March 2011. Last Updated 05 March 2013.
Updates
26 June 2017
Added Chrome 58, Firefox 52, IE Edge 15
02 Jan 2015
Added Safari 7, which compared to 5 has removed the count limit, and doubled the Max Size Per Domain
Android 4.0+ is using Chrome Mobile, which so far has the same limits as desktop chrome.
Firefox switched their limit from characters to bytes at some point
IE 11 same as previous versions.
Opera 26 (may be earlier) has copied Chrome's limits
Leaving conclusion as is. There are still 1.7% on 5.X iOS which has the 4093 domain limit
05 March 2013
Wow I last updated this over a year ago. And what an interesting year it has been. I have changed jobs, tried a startup (unsuccessfully so far), traveled, and now updated this webpage.
I've now hosting it on amazon, I apprechiate that atspace.com was free but it went down too much. I assume this is why this page doesn't rank in google, or maybe its just because its ugly :p
Added Chrome 25; IE 10 (thanks JimboG); Firefox 14 Mac (thanks Rob); IE 6 Unpatched; Chrome several all same; Firefox several all same; Opera 12
Opera 12 seem to be following IE's direction, and using 5117 bytes per cookie, although IE is 5117 characters
Reduced conclusion from 4095 bytes to 4093 bytes thanks to my iPad.
28 September 2011
Added Chrome 15; IE 9
10 August 2011
Added Chrome 12/13; Opera 10;
Added Safari Mac thanks to Deeman
June 2011 W3 stats
02 Marh 2011
Added Chrome 10
Safari Mac uncertain on limit
March 2011 W3 stats
Increased conclusion from 30 cookied to 50 now that opera 8 and 9 are older