Problems deleting cookies, won't unset

强颜欢笑 提交于 2019-11-28 09:00:38

The manual states:

Cookies must be deleted with the same parameters as they were set with. If the value argument is an empty string, or FALSE, and all other arguments match a previous call to setcookie, then the cookie with the specified name will be deleted from the remote client. This is internally achieved by setting value to 'deleted' and expiration time to one year in past.

So also make sure that $path is specified correctly -- also when deleting it. For instance, if the cookie was specified in a subdirectory, you may not be able to delete it from either the parent or children directories (or both).

I'm not entirely sure how the permissions work, but you might want to use the Web Developer Toolbar to view what the path is of the cookie you are attempting to delete.

Ok, I really don't understand, but it works now. The magic code is:

setcookie("name", '', 1, $path);

Haven't I already tried that??! Whatever, it works now. Thanks for your help, people!

I'm surprised no one has mentioned it (or maybe I missed it), but domain is important too! If you are on sub-domain.example.com, and the cookie is from .example.com, then you need to explicitly set the domain parameter, otherwise it will assume the current domain and it won't work.

setcookie('cookiename', FALSE, -1, '/', '.example.com');

Sub-domains value will not clear cookies from parent domain.

I tried using

setcookie("name", "", -1);

and on my server with Apache/PHP5 it cleared the cookie (at least a var_dump($_COOKIE) showed an empty array).

Did you check if your script already send its HTTP headers?

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}

If you delete cookie for the specific path and your path parameter ends with the trailing slash '/' then it will work in Firefox and IE, but won't work in Chrome and Opera. If there is no trailing slash then it will only work in Chrome and Opera.

So you should use both:

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE

set a cookie

setcookie('cookiename', $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day

unset cookie

setcookie('cookiename', '', time() - 3600, "/");

No need to panic. Just copy function you use to set cookie and now minus the time. Do not get confuse, make it easy and clear.

This did the trick for me:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);

Have you tried setting the time to a small value and using a value for cookie?

setcookie("name", 'n', 1);

Happens to me as well one in ten times though. I guess its a problem with the way we code.

This is my code

setcookie("token", "", time() - 36000, "/");

I sugest to using

ob_start();

at the firts l

I had a similar issue.

I found that, for whatever reason, echoing something out of logout.php made it actually delete the cookie:

echo '{}';
setcookie('username', '', time()-3600, '/');

Sometimes you saved the cookie in a different path than you're trying to delete/uset it in.

Go into eg. Chrome cookie settings and check the cookie path, then add the path to the setcookie command, and delete it like this:

setcookie( "my_cookie_name","",1,'/mypath');

Trying to delete or unset a cookie that is saved in the wrong path will not work and can be very frustrating.

Just define a custom function in global core functions file like global.php

function delete_cookie()
{
unset($_COOKIE['cookiename']);
setcookie('cookiename',NULL,time()-3600, '/');
return true;
}

and use this function at the top of the html code like

include('global.php')
if(isset($_GET['delete_cookie']))
{
delete_cookie(); //if you want to pass the parameters into the function also possible like delete_cookie(param1);
}

Just like is said in the correct answer (I want it to send an updated one), to unset, every parameter used to set the cookie is necessary, even secure and httponly

Set

setcookie("name_cookie", $name_value, 0, '/', $domain, false, true);

Unset

setcookie("name_cookie", '', time()-1000, '/', $domain, false, true);

I'm surprised no one has posted this yet, but this works perfectly for me:

To CREATE or CHANGE cookie by name:

$_COOKIE['myCookieName'] = 'I can be changed to whatever u want';

To DELETE a cookie by name:

unset($_COOKIE['myCookieName']);
Ajay Kumar
var remember = $.cookie('auto_login');
if (remember == 'true') {
    var username = $.cookie('username');
    var password = $.cookie('password');
    $('#username').val(username);
    $('#password').val(password);
}

$('#logsub').click(function (event) {
    if ($('#auto_login').is(':checked')) {
        var username = $('#username').val();
        var password = $('#password').val();
        // set cookies to expire in 14 days
        $.cookie('username', username, {expires: 14});
        $.cookie('password', password, {expires: 14});
        $.cookie('auto_login', true, {expires: 14});
    } else {
        // reset cookies
        $.cookie('username', null);
        $.cookie('password', null);
        $.cookie('auto_login', null);
    }
});
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!