Cookies em JavaScript

Esse script possui bugs conhecidos e não deve ser usado em produção. Leia Cookies em JSON para um script atualizado e com maior funcionalidade.

Quem nunca ouviu falar de cookies? Biscoito? Não exatamente. Cookies são arquivos de texto que são guardados na máquina cliente, e podem ser recuperados por uma aplicação web em uma visita posterior. Acho que você já deve saber do que estou falando.

Esse foi meu primeiro código “criado” no Aptana. Na verdade ele não foi criado por mim, apenas modifiquei ele pra parecer que foi meu (eu tenho uma boa razão pra isso). Os créditos são todos ao autor, Leandro Vieira Pinho.

O código (já modificado) é o seguinte:

Esse script possui bugs conhecidos e não deve ser usado em produção. Leia Cookies em JSON para um script atualizado e com maior funcionalidade.


var JGCookie = {
  date: new Date(),
  set: function(name, content, days) {
    var expires = "";
    if(days) {
	  this.date.setTime(this.date.getTime()+(days*24*60*60*1000));
      expires = this.date.toGMTString() + "; ";
	}
	document.cookie = name + "=" + content + "; " + expires + "path=/";
	return true;
  },
  get: function( name ) {
  	var nameE = name + "=";
	var cookies = document.cookie.split(";");
	for(var i = 0, Cookie; Cookie = cookies[i]; i++) {
	  while(Cookie.charAt(0) == " ") {
	  	Cookie = Cookie.substring(1,Cookie.length);
	  }
	  if(Cookie.indexOf(nameE) == 0) {
	  	return Cookie.substring(nameE.length,Cookie.length);
	  }
	}
	return false;
  },
  unset: function( name ) {
  	this.set(name, "", -1);
  	return true;
  }
}
		


Esse script possui bugs conhecidos e não deve ser usado em produção. Leia Cookies em JSON para um script atualizado e com maior funcionalidade.

Pra não passar em branco, e vocês pensarem que eu sou um copiador descarado, eu explico tudinho (alguma coisa eu tinha que fazer!).

Criando

Para criar um cookie, precisamos de um nome e uma descrição. Podemos incluir também uma data para expiração e um caminho. Eles ficam na máquina cliente como uma grande string contendo todas as chaves (nomes) e valores, assim: key=value; key2=value2. Devemos saber isso pra poder ler os cookies depois.

Um cookie novo é ceiado através de document.cookie (não é uma função). Pode parecer estranho, mas usamos uma igualdade para criar um cookie novo, assim:

document.cookie = "key=valor;";

Não se preocupe, os cookies já setados não serão apagados, por incrível que pareça.

Tem também o tempo para expiração do cookie. Ele é definido em milissegundos, então o transformamos para dias (através daquelas multiplicações). Sem mistério.

Apagando

Para apagar um cookie também é fácil. Definimos o nome que já setamos, e o setamos novamente, com valor vazio e expiração negativa (já venceu, perdeu, já era).

Lendo

Ler o biscoitinho é a parte mais complicada. Entender aquele for também não é a coisa mais fácil do mundo.

  	var nameE = name + "=";
	var cookies = document.cookie.split(";");  // cookies = todos cookies (divididos por ;, em um array)
	for(var i = 0, Cookie; Cookie = cookies[i]; i++) {  // Para cada membro em cookies...
	  while(Cookie.charAt(0) == " ") {
	  	Cookie = Cookie.substring(1,Cookie.length); // Se o primeiro caractere é um espaço, pulamos ao próximo...
		// ...quantas vezes forem necessárias, através do while
	  }
	  if(Cookie.indexOf(nameE) == 0) { // Se coincide nome pedido com nome corrente...
	  	return Cookie.substring(nameE.length,Cookie.length); // Retornamos o cookie
	  }
	}

Fácil, não? Explicado é sim, sofri com o for (confundi “=” com “==”, vê se pode? Aí me perdi todo).

Utilizando

Utilizar o código é facílimo. Veja:

JGCookie.set("Key", "Value", 1); // Setamos (nome, valor, duracao)
JGCookie.get("Key"); // Lemos (nome)
JGCookie.unset("Key"); // Apagamos (nome)
		

Dúvidas, sugestões, reclamações, comente! Nem cai o dedo (by Micox)…

Esse script possui bugs conhecidos e não deve ser usado em produção. Leia Cookies em JSON para um script atualizado e com maior funcionalidade.

Posts Relacionados

Postado em dezembro 28, 2006 às 22:07

Comentários

  1. Micox

    Ótimo Julio.
    Bem completo.


  2. Leandro Vieira Pinho

    Eaí Júlio, beleza cara?

    Obrigado pelo link.

    Só não compreendi onde você alterou o script, a não ser os nomes dos métodos :).

    Adorei isto: “[...] Os créditos são todos ao autor, Leandro Vieira Pinho.” tem muita gente por aí que altera as coisas (ou copiam) e nem citam.

    Sinceridade é tudo.

    Um forte abraço cara.


  3. JulioGreff

    Pois é, alterei mais os nomes mesmo, pra ficar de acordo com um uso futuro que farei. Mas mudei pouca coisa em algumas linhas, diminui umas duas eu acho. Concordo: sinceridade é tudo. Sempre que uso algo dos outros como base costumo dizer. Valeu.


  4. Henrique Lima

    Caros,

    Espero não estar falando besteiras e ainda por cima depois de tanto tempo, mas, creio que este código não tenha sido criado por este “Leandro” e sim que tenha vindo inserido no Dreamweaver… Pesquisem, mas em caso de ter falado besteira, me perdoem… Rsss

    PS Tenho quase certeza pois já usei um código identico que veio no programa como add.. :)


  5. JulioGreff

    Não sei te dizer não, Henrique. Confiei no post do Leandro, e acredito na sinceridade dele. Se puder pesquisar, a gente tira a dúvida. Fiz pequenas modificações no script, mas é mais ou menos isso, e também não há muito o que possa ser diferente aí…


  6. Talita

    Desculpe, eu li tudo e nao entendi nada :O
    na verdade oque me faz vir até aqui é que eu gosto de procurar sites na internet, e é preciso de Cookies para ver a maioria das fotos de Sites , Fan club’s e etc. E por algum motivo quando eu vou tentar ver as fotos , aparece que o meu pc nao aceita Cookies, pq isso acontece? oque tenho que fazer ? Aqui ninguem sabe mexer com isso, precisava muito da ajuda de alguem ! ;\


  7. JulioGreff

    @Talita: você precisa ativar os cookies do seu navegador. Veja aqui como fazer isso: http://www.online-tech-tips.com/internet-explorer-tips/how-to-enable-cookies-in-internet-explorer/pt/


  8. Marcus Vinicius Bastos LEandro

    Julio,

    Esta duração é em dias?

    Abraços!


  9. JulioGreff

    Sim, na minha função é em dias, mas pode-se alterar o código, já que na verdade a duração dos cookies é em milissegundos.

    Até mais!


  10. Marcus Vinicius Bastos LEandro

    Júlio, uma observação. No meu firefox, a duração do cookie não está funcionando, ou seja, ele expira no fim da sessão ( quando o navegador é fechado )


  11. JulioGreff

    Obrigado pela observação Marcos, vou verificar!


  12. Albino

    Julio vc sabe dizer se tem alguma restrição a versão de IE?
    Pois utilizei essas funções e funcionou bem no IE7 e no firefox, mas no IE6 ñ funcionou.
    Vc saberia dizer pq?
    Obrigado.


  13. Albino

    Outra coisa, vc sabe dizer pq qdo eu limpo os cookies (mantendo a página aberta) o cookie continua lá, isto é, ele ainda é retornado pela função JGCookie.get(“Key”).
    Obrigado novamente.


  14. JulioGreff

    @Albino: obrigado pela observação também. Em breve vou verificar o script (já tem vários bugs encontrados), e então retorno a você e ao Marcus.

    Até mais!


  15. Chris

    Ah, eu postei hoje no blog para o qual escrevo algo desse tipo: uma classe para trabalhar com Cookies. Fiz a minha usando a (biblioteca) Prototype.
    Mas vejo aqui que esqueci de colocar um método para apagar o cookie, bem como expirar o mesmo…

    Muito bom o post, cara! Parabéns :)


  16. ThiagoGomez

    Julio, se vc já fez as alterações no código vc poderia posta-lo pronto ou então repassa-lo.
    Concordando com todos, o post é muito bom.
    Agrdeço
    Até mais


  17. JulioGreff

    @Thiago: ainda não fiz as alterações, estão programadas para até o final do mês ou o início do próximo. Aviso assim que estiver pronto.


  18. Word Script

    O seu site esta com problemas, eu tentei entra com o IE 8 e veio uma mensagem que eu estava utilizando o IE6


  19. FernandoJS

    Amigo,

    O script está com algum problema, não está gravando o cookie.

    Eu teste no firefox.

    Abs


Deixe seu comentário