Nada de mais: guardar JSON num cookie.
Esta ideia surgiu dada a necessidade de guardar as preferências do utilizador numa determinada janela. Pareceu-me razoável e desenvolvi um protótipo (se repararam no negrito não preciso explicar mais).
À partida a performance será sempre melhor do que fazer parsing de strings uma vez que JSON é um subset de JavaScript (neste teste a média é de 12ms mas o cookie é muito “simples”).
Ainda assim restam algumas preocupações:
- dependendo da complexidade das estruturas a armazenar incorremos no risco de extrapolar a capacidade do cookie (4096 bytes num limite de 20 cookies por cada host ou domínio);
- fazer o eval do conteúdo do cookie não é seguro até garantirmos a sua autenticidade (a não violação do mesmo);
(mais sobre cookies no RFC 2109 – HTTP State Management Mechanism)
Deixando as preocupações para uma próxima etapa, segue o código fonte
<html> <head> <title>coockie demo</title> <script type="text/javascript"> function getCookie() { var data; if (document.cookie.length == 0) return false; var startPos = document.cookie.indexOf('tempo='); if (startPos != -1) //we have cookie { startPos = startPos + 6; //go ahead //find end of data var endPos = document.cookie.indexOf('}',startPos); if (endPos != -1) //cookie is ok and we have data { data = document.cookie.substring(startPos,endPos+1); data = eval('('+ data +')'); console.log(unescape(data.city)); return true; } else{ //cookie is not ok so lets rewrite it! return false; } } } function setCookie(name) { var expDate = new Date(); expDate.setDate(expDate.getDate()+ 365); document.cookie = "tempo={'city':'"+ escape(name) +"'};expires="+ expDate.toGMTString(); } function run() { if (!getCookie()) { var name = prompt('Your city name here!'); setCookie(name); } } </script> </head> <body> <script type="text/javascript"> console.time('getCookie'); run(); console.timeEnd('getCookie'); </script> </body> </html>


