Quando quero remover um cookie, tento
unset($_COOKIE['hello']);
Vejo no meu navegador de cookies do Firefox que o cookie ainda existe. Como posso realmente remover o cookie?
Quando quero remover um cookie, tento
unset($_COOKIE['hello']);
Vejo no meu navegador de cookies do Firefox que o cookie ainda existe. Como posso realmente remover o cookie?
Respostas:
Você pode tentar isso
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
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)
setcookie("hello", "", time()-3600);
O cookie expirará na próxima vez que a página for carregada.
Uma maneira limpa de excluir um cookie é limpar o $_COOKIE
arquivo de valor e o cookie do navegador:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
chamada:setcookie('key', '', time() - 3600, '/');
unsetting
bem-sucedido.
null
valores, você precisará usar array_key_exists () , pois um cookie com um null
valor não será encontrado por uma isset()
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 futuro após a época (1 de janeiro de 1970 00:00:00 UTC), da seguinte maneira:
setcookie("hello", "", 1);
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);
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:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Limpando o cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Espero que ajude.
Se você configurar o cookie para expirar no passado, o navegador o removerá. Veja exemplo de exclusão de setcookie () em php.net
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.
É assim que o código PHP v7 setcookie () funciona quando você faz:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Na saída do tcpdump enquanto fareja a porta 80, o servidor envia ao cliente (navegador) os seguintes cabeçalhos HTTP:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Observando pacotes nas solicitações a seguir, o Navegador não envia mais esses cookies nos cabeçalhos
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ê?
''
não é a mesma coisa que null
.
Para remover todos os cookies, você pode escrever:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Basta definir a data de validade como uma hora atrás, se você quiser "remover" o cookie, desta forma:
setcookie ("TestCookie", "", time() - 3600);
ou
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
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:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
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
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:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
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:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Obrigado e tenha um bom dia :)
$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.
Se você deseja excluir completamente o cookie de todo o seu domínio atual, o código a seguir certamente o ajudará.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
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.
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 { return false; }
}
Se você deseja remover $ _COOKIE ['user_account'].
Apenas use:
unset_cookie('user_account');
Quando você entra 0
para o horário, significa "agora" (+ 0s a partir de agora é agora) para o navegador e ele exclui o cookie.
setcookie("key", NULL, 0, "/");
Eu verifiquei no navegador Chrome que me dá:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Basta definir o valor do cookie para false
, para desmarcá-lo,
setcookie('cookiename', false);
PS: - Essa é a maneira mais fácil de fazer isso.
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']);
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.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
funciona para qualquer domínio, localhost ou não.
$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.