jquery, deletar cookies

90

Desejo usar JQuery para excluir cookies; Eu tentei isso

$.cookie('name', '', { expires: -1 });

Então eu atualizo a página e o cookie ainda está lá:

alert('name:' +$.cookie('name'));

Por quê? obrigado

user319854
fonte
algum navegador excluirá o cookie somente depois que o navegador for reiniciado.
ZOLDIK

Respostas:

145

Para excluir um cookie com JQuery, defina o valor como null:

$.cookie("name", null, { path: '/' });

Edit: A solução final foi especificar explicitamente a pathpropriedade sempre que acessar o cookie, porque o OP acessa o cookie de várias páginas em diretórios diferentes e, portanto, os caminhos padrão eram diferentes (isso não foi descrito na pergunta original). A solução foi descoberta na discussão abaixo, o que explica porque essa resposta foi aceita - apesar de não ser correta.

Para algumas versões do cookie jQ, a solução acima definirá o cookie como string null. Assim não retirando o cookie. Use o código conforme sugerido abaixo.

$.removeCookie('the_cookie', { path: '/' });
Chadwick
fonte
Mas a partir da fonte aqui: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}que o que se passa dentro da função de processamento, de modo que é suposto para executar a mesma. (os parâmetros são (name, value, options))
aularon
9
O código de configuração do cookie e o código de teste estão na mesma página? Caso contrário, você precisará definir explicitamente o pathnas opções para ambos os comandos, já que o padrão é o caminho da página atual. Teste definindo como root de seu domínio em todos os lugares onde o cookie é lido e gravado:$.cookie('name', value, {path:'/'})
Chadwick,
1
Chadwick> Talvez você esteja certo. Para exm. Eu defino cookies em site.com, em seguida, vá em site.com/user, site.com/user/mod, site.com/user/mod/new e desejo ver cookies em toda esta página. Como deve ser parecido com o caminho, como este: {caminho: '/'}?
user319854
2
Este código não remove o cookie, mas define nulo em seu valor.
Tomzan
12
-1 porque isso não remove o cookie. $.removeCookie('cookie_name')faz.
Rosdi Kasim
71

Você pode tentar isto:

$.removeCookie('the_cookie', { path: '/' });

fonte: https://github.com/carhartl/jquery-cookie#readme

Rebelde Gert-Jan
fonte
Sim .. Estou bem com isso
Cataclismo
Quando você usa um subdomínio, também pode ter que especificá-lo. Principalmente porque pode ser necessário o ponto no início do nome de domínio (.www.example.com)
Alexis Wilke
Observe que isso não funcionou para nós, onde o código precisava ir para outra função por qualquer motivo. $ .cookie ('nome', nulo) como acima parece ser mais confiável. No entanto, esse cookie de remoção pode funcionar para algumas pessoas.
Ligemer
Esta é realmente a verdadeira resposta!
Kalaschni
15

Você também pode excluir cookies sem usar o plugin jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Jan Richter
fonte
4

é o problema de mal-entendido de cookie. Os navegadores reconhecem os valores dos cookies não apenas para as chaves, mas também comparam as opções de caminho e domínio. Assim, os navegadores reconhecem valores diferentes de valores de cookie que a chave é 'nome' com a opção de configuração do servidor (caminho = '/'; domínio = 'meudominio.com') e a chave é 'nome' sem opção.

logan kim
fonte
1

Tente isto

 $.cookie('_cookieName', null, { path: '/' });

O {path: '/'} faz o trabalho por você

Otto Kanellis
fonte
1

Funcionou para mim apenas quando pathfoi definido, ou seja:

$.cookie('name', null, {path:'/'})
Andron
fonte
Downvoting faz com que você copie e cole minha resposta como sua
Otto Kanellis,
1
@OttoKanellis então eu sugiro fazer downwote da resposta aceita também (porque ela foi editada depois da minha resposta) e downvote da sua resposta também (porque você não destacou a importância do parâmetro path )!
Andron,
-3

O que você está fazendo está correto, o problema está em outro lugar, por exemplo, o cookie está sendo configurado novamente de alguma forma na atualização.

Aularon
fonte
4
Embora este link possa responder à pergunta, é melhor incluir as partes essenciais da resposta aqui e fornecer o link para referência. As respostas somente com link podem se tornar inválidas se a página vinculada mudar.
Uri Agassi
Por essa mesma resposta, o que estou dizendo é que a OP está fazendo isso da maneira certa. Copiar e colar o código OP será redundante e adicionar outro código confundirá o leitor. Pode-se rolar para cima e ver o que o OP estava fazendo, é a "parte essencial" aqui. No entanto, se você achar que será melhor incluir algo (aparentemente algumas pessoas, façam ... Uma delas até votou contra minha resposta :)), apenas edite a resposta e corrija-a de acordo. Atenciosamente
aularon
O problema com links é que eles tendem a "apodrecer" - eles mudam, eles se movem, eles desaparecem (caso em questão - seu link está morto!). É por isso que preferimos que você cite o texto relevante do link junto com ele, para que sua resposta seja independente (consulte também meta.stackexchange.com/questions/8231/… )
Uri Agassi
Estou bem ciente disso, mas de novo: não é este o caso aqui. Toda a resposta acima pode ser reescrita como "O que você está fazendo está correto, o problema está em outro lugar, por exemplo, o cookie está sendo configurado novamente de alguma forma na atualização". Portanto, novamente, a podridão do link é um problema, incluindo a própria resposta ao lado do link é o caminho a percorrer. É simplesmente irrelevante para esta resposta.
aularon
Então, repetidamente, se uma resposta contém um link, e esse link está morto, não significa que a resposta não seja boa o suficiente. Alguns links existem apenas para fornecer detalhes adicionais, mas não são necessários para que a resposta seja completa. Esse comportamento me parece um bot mal programado que não tem a PNL básica para entender o link de contexto fornecido. Você provavelmente deveria parar de fazer isso.
aularon