Você pode encontrar $cookie->delete()em github.com/delight-im/PHP-Cookie útil. O código da pergunta apenas exclui a propriedade que foi analisada no lado do servidor. O cookie continuará ativo no lado do cliente.
Entendo que este é um exemplo, mas nunca armazene nome de usuário ou senha em cookies.
tamasd
3
É inútil unset($_COOKIE['Hello']);. Não muda nada se você removê-lo.
Machineaddict
30
@machineaddict unset($_COOKIE['Hello']);é realmente importante se você puder verificar o cookie em algum lugar posteriormente no código.
Andreas Hultgren
4
funcionando bem, mas ao tentar recarregar a página. ele viu o conjunto de cookies com dados antigos, por quê?
Nilesh patel
9
======= NÃO FUNCIONA NO CHROME ======= Tentei esse código hoje e quando acesso o site usando o google chrome, e depois vou para as ferramentas de desenvolvedor no chrome, vejo que o tempo de expiração é definido como 1 segundo antes da época (por exemplo, 1969-12-31 23:59:59), no entanto, quando da próxima vez que envio a página, o cookie é enviado ao servidor. Quando mudei o -1 para 1 (por exemplo, 01-01-2009 00:00:01) para fornecer o seguinte comando: setcookie ('Hello', null, 1, '/'); em seguida, cromo agiu como esperado e não apresentou o cookie
Peter Hinds
284
Defina o valor como "" e a data de validade como ontem (ou qualquer data anterior)
setcookie("hello","", time()-3600);
O cookie expirará na próxima vez que a página for carregada.
Se você colocar uma data muito distante no passado, o IE latirá e a ignorará, ou seja, o valor não será removido.
Julien
52
@strager O manual declara: Se definido como 0 ou omitido, o cookie expirará no final da sessão (quando o navegador fechar). Isso não está realmente excluindo o cookie. Realmente não sei se o IE fará o que Julien disse, mas é mais do que possível que o IE faça algo estranho.
Yannis 23/05
31
Além disso, não se esqueça de desmarcar ($ _ COOKIE ["olá"])) também, porque se houver código no restante da página que analise $ _COOKIE ["olá"], ele ainda o encontrará definido. Eu só fui mordido por este.
Magmatic
12
Além disso, é uma boa ideia definir o caminho, então setcookie ('olá', '', time () - 3600, '/');
Stephan Weinhold
227
Uma maneira limpa de excluir um cookie é limpar o $_COOKIEarquivo de valor e o cookie do navegador:
if(isset($_COOKIE['key'])){
unset($_COOKIE['key']);
setcookie('key','', time()-3600,'/');// empty value and old timestamp}
Este é o melhor método, porque você não precisa atualizar a página!
MaxV
19
Eu continuo descendo a página e as respostas estão ficando melhores, engraçadas. Mas este é o melhor, pare de procurar aqui.
Andrew
23
Para sua informação, se você configurar o cookie usando um caminho, também precisará incluir o caminho nesta setcookiechamada:setcookie('key', '', time() - 3600, '/');
Gavin
1
@ Gavin Obrigado por essa dica. Fiquei me perguntando por que não estava excluindo, mas foi unsettingbem-sucedido.
stinkysGTI
1
Para quem está verificando a existência de um cookie e se preocupa com os cookies que existem com nullvalores, você precisará usar array_key_exists () , pois um cookie com um nullvalor não será encontrado por uma isset()verificação.
Leith
27
Para excluir um cookie de forma confiável, não é suficiente configurá-lo para expirar a qualquer momento no passado, conforme calculado pelo seu servidor PHP. Isso ocorre porque os computadores clientes podem e costumam ter horários diferentes dos do seu servidor.
A melhor prática é substituir o cookie atual por um cookie em branco que expire um segundo no futuro após a época (1 de janeiro de 1970 00:00:00 UTC), da seguinte maneira:
Me corrija se eu estiver errado, mas definir isso como "1" definiria um segundo após a época, e não um segundo no futuro ..? No entanto, acredito que você está correto quanto às diferenças de fuso horário, portanto, a melhor solução seria defini-lo para 2 dias no passado (para que mesmo o fuso horário mais distante ainda desative o cookie).
PaulSkinner
@PaulSkinner a data da época é independente dos fusos horários, o computador faz esse cálculo para você.
AlexR $
3
@AlexR Sim. Realmente não responde ao meu argumento. Para meu entendimento, o código acima não definir o cookie para expirar no passado (um segundo passado a época), se não me engano.
PaulSkinner
@PaulSkinner, é claro, o restante do seu comentário está perfeitamente bem.
AlexR # 26/14
9
+1 para o "1". Não entendo por que todos os outros estão tão empenhados em definir um cookie excluído exatamente uma hora no passado.
Meisner
20
Isso desmarca o cookie no seu código, mas como a variável $ _COOKIE é atualizada a cada solicitação, ela volta à próxima solicitação da página.
Para realmente se livrar do cookie, defina a data de validade no passado:
// set the expiration date to one hour ago
setcookie("hello","", time()-3600);
@PratikCJoshi Somente se o seu código o procurar posteriormente.
AlphaMycelium
14
Eu tive o mesmo problema no meu código e descobri que era um problema de caminho do cookie. Verifique esta postagem de estouro de pilha: Não é possível excluir o conjunto de php
Eu havia definido o cookie usando um valor de caminho de "/", mas não tinha nenhum valor de caminho quando tentei limpá-lo, por isso não foi limpo. Então, aqui está um exemplo do que funcionou:
Configurando o cookie:
$cookiePath ="/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Veja o exemplo " Exemplo # 2 exemplo de exclusão de setcookie () " nos documentos do PHP. Para limpar um cookie do navegador, você precisa informar ao navegador que o cookie expirou ... o navegador o removerá. unsetcomo você usou, ele remove o cookie 'olá' da matriz COOKIE.
Para excluir o cookie, basta definir o valor como NULL:
"Se você definiu um cookie com valores não padrão para um tempo de expiração, caminho ou domínio, deverá fornecer esses mesmos valores novamente quando excluir o cookie para que o cookie seja excluído corretamente." Cite o livro "Aprendendo PHP5".
Portanto, este código deve funcionar (funciona para mim):
Configurando o cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Excluindo o cookie:
setcookie('foo', '', time() + 60 * 5);
Mas notei que todo mundo está definindo o prazo de validade como passado, isso é necessário e por quê?
É confiável, é por isso. Uma combinação de definir o valor para nada e um tempo no passado (mas não muito longe, pois o IE ocasionalmente não gosta muito do que eu li) funciona de maneira geral.
PaulSkinner
A cadeia vazia ''não é a mesma coisa que null.
orev 30/07
3
Para remover todos os cookies, você pode escrever:
foreach($_COOKIE as $key => $value){
unset($value);
setcookie($key,'', time()-3600);}
Eu sei que já faz muito tempo desde que este tópico foi criado, mas vi um pequeno erro nessa solução (posso chamá-lo assim, porque é um detalhe). Concordo que a melhor solução é provavelmente esta:
Porém, no presente caso, você exclui os cookies em todos os casos em que a função não configurada funciona e imediatamente cria novos cookies expirados, caso a função não configurada não funcione.
Isso significa que, mesmo que a função não configurada funcione, ela ainda terá 2 cookies no computador. O objetivo solicitado, do ponto de vista lógico, é excluir os cookies, se possível e se não for, fazê-lo expirar; para obter o resultado "mais limpo".
A função unset é destinada à lógica do PHP (se você deseja usar a variável $ _COOKIE ['Hello'], não pode, pois está desmarcada). E a função setcookie é para o navegador. Em duas finalidades diferentes, a ordem das funções não afeta o código real.
Kalzem
Na verdade, eu sabia que sim, mas se você quiser ter certeza absoluta de que o cookie foi desconfigurado / excluído e, portanto, use as duas soluções imediatamente, seria mais limpo antes que as teses expirem e depois desfeitas que teses não definidas e depois recrie um cookie expirado ... se você entende o que eu quero dizer?
Greg
Sim, desculpe responder agora :) Enviei porque vi pessoas fazendo isso de outra maneira .. mas parece mais inteligente assim, eu acho.
Greg
2
$cookie_name ="my cookie";
$cookie_value ="my value";
$cookie_new_value ="my new value";// Create a cookie,
setcookie($cookie_name, $cookie_value , time()+(86400*30),"/");//86400 = 24 hours in seconds// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time()+(86400*30),"/");// Delete a cookie,
setcookie($cookie_name,'', time()-3600,"/");// time() - 3600 means, set the cookie expiration date to the past hour.
Este código excluirá completamente a variável de cookie de todo o seu domínio, ou seja; "/" - indica que o valor da variável de cookie está definido para todo o domínio, não apenas para o domínio ou caminho atual. time () - 300 indica que foi definido para um horário anterior e expirará.
Você pode definir uma variável de sessão com base nos valores do cookie
session_start();if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin']=="true")){
$_SESSION['loggedin']="true";}
echo ($_SESSION['loggedin']=="true"?"You are logged in":"Please Login to continue");
Você pode simplesmente usar esta função de personalização:
function unset_cookie($cookie_name){if(isset($_COOKIE[$cookie_name])){
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name,null,-1);}else{returnfalse;}}
Se você deseja remover $ _COOKIE ['user_account'].
Apenas use:
Você precisa excluir os cookies com php no servidor e também com js no navegador. (Eles foram criados com php, mas os arquivos de cookies também estão no cliente do navegador):
Um exemplo:
if($_GET['action']=='exit'){// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Você não precisa de JavaScript para definir / excluir o valor do cookie. A função php setcookie vai fazer isso por você php.net/manual/en/function.setcookie.php
Michael Khalili
-5
Muitos de vocês estão esquecendo que isso só funcionará em uma máquina local. Em um domínio, você precisará de um padrão como este exemplo.
O parâmetro domain significará o domínio atual se for omitido.
DustWolf
Eu quis dizer que sua resposta está incorreta. Funcionará para qualquer domínio, não apenas para a máquina local, pois usará automaticamente o domínio atual. E seu comentário significa dizer que você está ofendido ou algo assim?
DustWolf 8/08
Você está lendo o texto fornecido acima do código? pare de me incomodar, estou trabalhando. Eu terminei de falar com você.
Peter Gruppelaar
Não entendo por que você fica irritado com outros usuários se eles apontam um erro na sua resposta. setcookiefunciona para qualquer domínio, localhost ou não.
xorinzor
Então, se todo mundo diz que é esse o caso ... então deve haver algo obviamente errado com a minha resposta ... não importa o chapéu que foi apontado neste post? ... você só quer algum tipo de resposta de direção e ignore qualquer usuário global que esteja trabalhando em uma situação semelhante ... entendi ... pare de me incomodar, minha resposta não está errada.
$cookie->delete()
em github.com/delight-im/PHP-Cookie útil. O código da pergunta apenas exclui a propriedade que foi analisada no lado do servidor. O cookie continuará ativo no lado do cliente.Respostas:
Você pode tentar isso
fonte
unset($_COOKIE['Hello']);
. Não muda nada se você removê-lo.unset($_COOKIE['Hello']);
é realmente importante se você puder verificar o cookie em algum lugar posteriormente no código.Defina o valor como "" e a data de validade como ontem (ou qualquer data anterior)
O cookie expirará na próxima vez que a página for carregada.
fonte
Uma maneira limpa de excluir um cookie é limpar o
$_COOKIE
arquivo de valor e o cookie do navegador:fonte
setcookie
chamada:setcookie('key', '', time() - 3600, '/');
unsetting
bem-sucedido.null
valores, você precisará usar array_key_exists () , pois um cookie com umnull
valor não será encontrado por umaisset()
verificação.Para excluir um cookie de forma confiável, não é suficiente configurá-lo para expirar a qualquer momento no passado, conforme calculado pelo seu servidor PHP. Isso ocorre porque os computadores clientes podem e costumam ter horários diferentes dos do seu servidor.
A melhor prática é substituir o cookie atual por um cookie em branco que expire um segundo
no futuroapós a época (1 de janeiro de 1970 00:00:00 UTC), da seguinte maneira:fonte
Isso desmarca o cookie no seu código, mas como a variável $ _COOKIE é atualizada a cada solicitação, ela volta à próxima solicitação da página.
Para realmente se livrar do cookie, defina a data de validade no passado:
fonte
unset()
do cookie?Eu tive o mesmo problema no meu código e descobri que era um problema de caminho do cookie. Verifique esta postagem de estouro de pilha: Não é possível excluir o conjunto de php
Eu havia definido o cookie usando um valor de caminho de "/", mas não tinha nenhum valor de caminho quando tentei limpá-lo, por isso não foi limpo. Então, aqui está um exemplo do que funcionou:
Configurando o cookie:
Limpando o cookie:
Espero que ajude.
fonte
Se você configurar o cookie para expirar no passado, o navegador o removerá. Veja exemplo de exclusão de setcookie () em php.net
fonte
Veja o exemplo " Exemplo # 2 exemplo de exclusão de setcookie () " nos documentos do PHP. Para limpar um cookie do navegador, você precisa informar ao navegador que o cookie expirou ... o navegador o removerá.
unset
como você usou, ele remove o cookie 'olá' da matriz COOKIE.fonte
É assim que o código PHP v7 setcookie () funciona quando você faz:
Na saída do tcpdump enquanto fareja a porta 80, o servidor envia ao cliente (navegador) os seguintes cabeçalhos HTTP:
Observando pacotes nas solicitações a seguir, o Navegador não envia mais esses cookies nos cabeçalhos
fonte
Para excluir o cookie, basta definir o valor como NULL:
"Se você definiu um cookie com valores não padrão para um tempo de expiração, caminho ou domínio, deverá fornecer esses mesmos valores novamente quando excluir o cookie para que o cookie seja excluído corretamente." Cite o livro "Aprendendo PHP5".
Portanto, este código deve funcionar (funciona para mim):
Configurando o cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Excluindo o cookie:
setcookie('foo', '', time() + 60 * 5);
Mas notei que todo mundo está definindo o prazo de validade como passado, isso é necessário e por quê?
fonte
''
não é a mesma coisa quenull
.Para remover todos os cookies, você pode escrever:
fonte
Basta definir a data de validade como uma hora atrás, se você quiser "remover" o cookie, desta forma:
ou
Fonte: http://www.php.net/manual/en/function.setcookie.php
Você deve usar a
filter_input()
função para todas as globais em que um visitante pode entrar / manipular, assim:Você pode ler mais sobre isso aqui: http://www.php.net/manual/en/function.filter-input.php e aqui: http://www.w3schools.com/php/func_filter_input.asp
fonte
Eu sei que já faz muito tempo desde que este tópico foi criado, mas vi um pequeno erro nessa solução (posso chamá-lo assim, porque é um detalhe). Concordo que a melhor solução é provavelmente esta:
Porém, no presente caso, você exclui os cookies em todos os casos em que a função não configurada funciona e imediatamente cria novos cookies expirados, caso a função não configurada não funcione.
Isso significa que, mesmo que a função não configurada funcione, ela ainda terá 2 cookies no computador. O objetivo solicitado, do ponto de vista lógico, é excluir os cookies, se possível e se não for, fazê-lo expirar; para obter o resultado "mais limpo".
Então, acho que devemos fazer:
Obrigado e tenha um bom dia :)
fonte
fonte
Se você deseja excluir completamente o cookie de todo o seu domínio atual, o código a seguir certamente o ajudará.
Este código excluirá completamente a variável de cookie de todo o seu domínio, ou seja; "/" - indica que o valor da variável de cookie está definido para todo o domínio, não apenas para o domínio ou caminho atual. time () - 300 indica que foi definido para um horário anterior e expirará.
É assim que é perfeitamente excluído.
fonte
Você pode definir uma variável de sessão com base nos valores do cookie
fonte
Você pode simplesmente usar esta função de personalização:
Se você deseja remover $ _COOKIE ['user_account'].
Apenas use:
fonte
É simples!
fonte
Quando você entra
0
para o horário, significa "agora" (+ 0s a partir de agora é agora) para o navegador e ele exclui o cookie.Eu verifiquei no navegador Chrome que me dá:
fonte
Basta definir o valor do cookie para
false
, para desmarcá-lo,PS: - Essa é a maneira mais fácil de fazer isso.
fonte
Você precisa excluir os cookies com php no servidor e também com js no navegador. (Eles foram criados com php, mas os arquivos de cookies também estão no cliente do navegador):
Um exemplo:
fonte
Muitos de vocês estão esquecendo que isso só funcionará em uma máquina local. Em um domínio, você precisará de um padrão como este exemplo.
fonte
setcookie
funciona para qualquer domínio, localhost ou não.