Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除Cookie时出现问题,赢得';不能取消_Php_Cookies_Unset - Fatal编程技术网

Php 删除Cookie时出现问题,赢得';不能取消

Php 删除Cookie时出现问题,赢得';不能取消,php,cookies,unset,Php,Cookies,Unset,我曾尝试在php手册和互联网上搜索如何删除Cookie,我尝试的方式与他们说的完全相同: setcookie("name", '', 1); 或 但是当我在Firefox的cookies对话框中检查cookies时,它仍然是相同的值。 我使用以下行设置此cookie: setcookie("name", $value, time() + 259200, $path); 我发现有关stackoverflow的问题: ,但没有一个答案解决了问题。我也试着像作者所说的那样,加入所有的参数,但没有效

我曾尝试在php手册和互联网上搜索如何删除Cookie,我尝试的方式与他们说的完全相同:

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

但是当我在Firefox的cookies对话框中检查cookies时,它仍然是相同的值。 我使用以下行设置此cookie:

setcookie("name", $value, time() + 259200, $path);
我发现有关stackoverflow的问题: ,但没有一个答案解决了问题。我也试着像作者所说的那样,加入所有的参数,但没有效果


有人看到这个问题了吗?

您是否尝试过将时间设置为一个较小的值,并为cookie使用一个值

setcookie("name", 'n', 1);
我试着用

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

在我使用Apache/PHP5的服务器上,它清除了cookie(至少有一个var_dump($_cookie)显示了一个空数组)。

您是否检查了脚本是否已经发送了它的HTTP头

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

但我也有十分之一的机会。我想这是我们编码方式的问题

这是我的密码

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

删除cookie时必须使用与设置cookie时相同的参数。如果value参数是空字符串,或
FALSE
,并且所有其他参数与之前对setcookie的调用相匹配,则将从远程客户端删除具有指定名称的cookie。这是通过将值设置为“已删除”并将过期时间设置为过去一年在内部实现的

因此,也要确保正确指定了
$path
删除它时也是如此。例如,如果cookie是在子目录中指定的,则您可能无法从父目录或子目录(或两者)中删除它


我不完全确定权限是如何工作的,但您可能希望使用Web Developer工具栏查看您试图删除的cookie的路径。

好的,我真的不明白,但它现在可以工作了。神奇的密码是:

setcookie("name", '', 1, $path);
我不是已经试过了吗??!不管怎样,它现在起作用了。谢谢大家的帮助

我建议使用

ob_start();
起初,我也有类似的问题

我发现,无论出于何种原因,在logout.php中回显某些内容实际上会删除cookie:

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

我很惊讶还没有人发布这篇文章,但这篇文章非常适合我:

按名称创建或更改cookie:

$_COOKIE['myCookieName'] = 'I can be changed to whatever u want';
按名称删除cookie:

unset($_COOKIE['myCookieName']);

有时,您将cookie保存在不同的路径中,而不是尝试在其中删除/使用它

进入例如Chrome cookie设置并检查cookie路径,然后将该路径添加到setcookie命令,并按如下方式删除它:

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

尝试删除或取消设置保存在错误路径中的cookie将不起作用,可能会非常令人沮丧。

只需在global.php等全局核心函数文件中定义一个自定义函数即可

function delete_cookie()
{
unset($_COOKIE['cookiename']);
setcookie('cookiename',NULL,time()-3600, '/');
return true;
}
并在html代码顶部使用此函数,如

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);
}

如果您删除特定路径的cookie,并且您的path参数以尾随斜杠“/”结尾,那么它将在Firefox和IE中工作,但在Chrome和Opera中不工作。如果没有尾部斜杠,那么它只能在Chrome和Opera中使用

因此,您应该同时使用:

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

设置cookie

setcookie('cookiename',$cookie_值,time()+(86400*30),“/”; //86400=1天

取消设置cookie

setcookie('cookiename','',time()-3600,“/”


不必惊慌。只需复制用于设置cookie的函数,现在减去时间。不要搞混了,让它变得简单明了。

这为我带来了窍门:

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

我很惊讶没有人提到它(或者我错过了),但是域也很重要!如果您在sub-domain.example.com上,并且cookie来自.example.com,那么您需要显式设置domain参数,否则它将假定为当前域,并且无法工作

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

子域值将不会清除父域中的cookie。

正如正确答案中所说的(我希望它发送一个更新的),要取消设置,用于设置cookie的每个参数都是必需的,即使是安全httponly

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);
    }
});
设置

取消


这是我对cookie的经验,在浏览器窗口(我们用来查看现有cookie)关闭之前,cookie可能不会从客户机上删除。因此,请关闭该窗口并尝试您的代码

  • 删除创建中存在的参数时,所有参数都必须存在
  • 时间一定是过去了
  • 值必须为“”(空)
  • 文件夹路径在创建时必须相同

我正在检查Firefox cookie对话框,设置cookie的路径与取消设置cookie的路径相同。但是我尝试取消设置cookie的地址与我设置cookie的路径不同。我还发现,如果过期日期是在将来,我可以更改cookie的值。如果我在过去使用某个值,则不会发生任何事情。奇怪?经过几分钟的测试,我没能让它工作!根本不删除cookie。现在我知道了:使用setcookie的参数与您在创建时使用的参数相同,$path,$domain等等。setcookie($name,NULL,-1)不够!谢谢你的评论!最后我安装了一个Chrome扩展,以找出我的应用程序设置的cookie的路径,然后我终于可以完全取消设置了!回答得真好!我一直在绞尽脑汁,谢谢你的回答。到底有什么区别?我也尝试过使用path参数,如果你是这个意思的话?不,我的意思是说,即使我遇到了与你相同的问题。我发现,如果过期日期是在未来,我实际上可以更改这些值。那么价值就无关紧要了。但是使用“1”作为时间似乎不起作用,time()-3600也不起作用。cookie名称中的点被uChars替换-这可能会导致一些问题。首先,请确保cookie视图(例如在Firefox中)已实际刷新。然后,做你已经做过的事,但要注意所有的事情
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);
    }
});
setcookie("name_cookie", $name_value, 0, '/', $domain, false, true);
setcookie("name_cookie", '', time()-1000, '/', $domain, false, true);