Acessar Cookies em outras abas

22 respostas Resolvido
javascript
L

Quero acessar um cookie em varias abas do navegador, como posso fazer isso?
Por exemplo criei o Cookie numa página, aí mudo de página e quero somar 10 ao valor que está no cookie clicando num botão.

22 Respostas

L

Se estiver no mesmo domínio, basta acessar o cookie normalmente.

L

Tenho um código, mas quando vou abrir o cookie ele reseta.

L

Vc definiiu a pontuação fixa no seu cookie (document.cookie = "pontos=100"). E não achei a parte em que a pontuação é atualizada.

L

Humm. Como eu poderia fazer essa atualização?

L

Nesse link tem um exemplo: https://www.w3schools.com/js/js_cookies.asp, procure por ** A Function to Set a Cookie**.

Ou vc pode usar essa lib js para fazer isso de maneira mais tranquila

L

O setCookie irá mostrar meu cookie, certo?
Aí depois de criado posso linkar essa função a um botão e meu cookie sera exibido?

L

Set significa “definir”, ou seja, a função setCookie irá definir um valor à um cookie. Nesse mesmo link, tem a função getCookie que irá “pegar” (a palavra get) o valor do cookie.

L

Ok. Criei o cookie, aí clico em um botao para fazer uma operação somando mais 1 ao cookie, isso eu faço no getCookie?

L

Veja bem:

  • getCookie = pegar o valor do cookie
  • setCookie = alterar o valor do cookie

Se vc precisa somar +1, vc pode tentar algo assim:

var valor = getCookie('somaPontos');
var novoValor = valor + 1;
setCookie('somaPontos', novoValor);

Você resolveu usar a solução na unha (do site W3C) ou da lib do github que mandei?

L

peguei no W3C

function setCookie(valor) {

document.cookie = "pontos" + "=" + valor;

}

function getCookie(name) {

var pattern = RegExp(name + "=.[^;]*")

var matched = document.cookie.match(pattern)

if (matched) {

    var cookie = matched[0].split('=')

    return cookie[1]

}

return "";

}

var valor = getCookie(‘pontos’);

var novoValor = valor + 1;

setCookie(‘pontos’, novoValor);

L
Solucao aceita

Use essas funções:

function setCookie(cname, cvalue) {
  var d = new Date();
  d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000));
  var expires = "expires="+d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

Para salvar o valor dos pontos, faça:

var pontos = //lógica para recuperar a pontuação atual
setCookie('pontuacao', pontos);

E para recuperar o os pontos, faça:

var pontos = getCookie('pontuacao');
// aqui faça o que quiser com os pontos
L

Assim? E para sempre somar mais 1, chamo qual função?

function setCookie(cname, cvalue) {

var d = new Date();

d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000));

var expires = expires= + d.toUTCString();

document.cookie = cname + = + cvalue + ; + expires + ;path=/;
}

function getCookie(cname) {

var name = cname + =;

var ca = document.cookie.split(;);

for (var i = 0; i < ca.length; i++) {

var c = ca[i];

while (c.charAt(0) ==  ') {

c = c.substring(1);

}

if (c.indexOf(name) == 0) {

return c.substring(name.length, c.length);

}

}

return “”;

}
var pontos = 0

setCookie(pontuacao, pontos); //nome do cookie - valor de pontos

var pontos = getCookie(pontuacao);

var novoValor = pontos + 1;

setCookie(pontuacao, novoValor);texto em negrito
L

Vc tem que incrementar 1 ponto na sua lógica de pontuação. Em que momento que a pontuação tem que ser incrementada?

L

É um quiz, então quando eu clicar na resposta certa será incrementado 1 ponto e trocará de aba para a próxima pergunta.

L

Então crie um função para fazer isso:

var valor = getCookie('somaPontos');
var novoValor = valor + 1;
setCookie('somaPontos', novoValor);

E chame a função quando a resposta certa for clicada.

L

Crio a função com esse código q me mandou?
Var valor = getCookie…

L

Sim, mas elabore sua lógica.

L

A lógica é essa, quando a resposta certa ser clicada chamará essa função.

funcion pontos(){

var valor = getCookie(somaPontos);

var novoValor = valor + 1;

setCookie(somaPontos, novoValor);

}
L

Eu só renomearia a função para algo mais fácil de entender, como: incrementarPontuacao, em vez de apenas “pontos”.

L

Muito obrigado, mesmo! E desculpe a ignorância ahahah

L

Só mais uma coisa :sweat_smile:
Essa minha função, no document.getElement… Ele imprime NaN.
Você sabe o que pode ser? Ou se estou fazendo algo errado?

function pontos() {

var valor = parseInt(getCookie(somaPontos));

var novoValor = valor + 1;

document.getElementById(pontos).innerHTML = novoValor

setCookie(somaPontos, novoValor);

}

L

Tente assim:

function pontos() {
	var cookie = getCookie(somaPontos);
	var valor;
	
	if (!cookie) {
		valor = 0;
	} else {
		valor = parseInt(cookie);
	}
	
	var novoValor = valor + 1;
	document.getElementById(pontos).innerHTML = novoValor
	setCookie(somaPontos, novoValor);
}
Criado 24 de março de 2020
Ultima resposta 25 de mar. de 2020
Respostas 22
Participantes 2