如何在PHP中取消设置cookie?

如何在PHP中取消设置cookie?,php,session,cookies,session-cookies,Php,Session,Cookies,Session Cookies,我需要弄清楚如何取消设置这个cookie。到目前为止,我所尝试的一切都失败了 这就是我目前如何使它不安,它似乎不起作用 setcookie("user_id", $user_id, time() - 7200); 我是这样设置的: setcookie("user_id", $user_id, time() + 7200); 我有一个名为set\u session\u from\u cookie()的函数,它检查cookie是否已设置,如果已设置,它将使用cookie启动新会话 functio

我需要弄清楚如何取消设置这个cookie。到目前为止,我所尝试的一切都失败了

这就是我目前如何使它不安,它似乎不起作用

setcookie("user_id", $user_id, time() - 7200);
我是这样设置的:

setcookie("user_id", $user_id, time() + 7200);
我有一个名为
set\u session\u from\u cookie()
的函数,它检查cookie是否已设置,如果已设置,它将使用cookie启动新会话

function set_session_from_cookie()
{
    if (isset($_SESSION['user_id'])) {
        echo '';
    } else {
        $_SESSION['user_id']=$_COOKIE['user_id'];
    }
}
问题是,当我在我的页面上使用这个时,我无法注销。我想这是因为我无法取消会话

我使用此函数的原因是,如果用户希望在结束会话后被记住,他们可以通过调用cookie重新启动会话

function set_session_from_cookie()
{
    if (isset($_SESSION['user_id'])) {
        echo '';
    } else {
        $_SESSION['user_id']=$_COOKIE['user_id'];
    }
}
注销:

<?php
require'core.php';
session_destroy();

setcookie("user_id", "", time() - 7200);
header('Location:/social_learning/site_pages/starter-template.php');

在不使用我创建的函数的情况下,如何使用保存的cookie重新启动会话?因为该函数似乎导致用户无法再注销。

将cookie的过期日期设置为过去的时间(例如,一秒钟后)

setcookie(“yourCookie”、“yourValue”,1)

这将导致cookie过期


使用
1
而不是
0
,因为
0
将cookie设置为在会话结束时过期。

查看php手册以获取有关setcookie的信息

这些注释应解释该过程:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
必须使用设置的参数删除Cookie 具有如果value参数为空字符串或FALSE,则 其他参数与之前对setcookie的调用相匹配,然后是cookie 将从远程客户端中删除具有指定名称的。这 通过将值设置为“已删除”和过期,在内部实现 时间到了过去的一年

因为设置值为FALSE的cookie将尝试删除 cookie,则不应使用布尔值。相反,使用0表示FALSE 1为真


您的代码没有多少安全问题,但是要回答您的问题,要在php中取消设置cookie,只需将过期时间设置为过去的时间:

setcookie("user_id", "", time()-10, "/");
setcookie("key","",time()-3600);

“loginform.php”不是有效的域,这可能是这里的问题。

在php手册中,您可以通过设置过期日期来删除cookie:

setcookie("user_id", "", time()-10, "/");
setcookie("key","",time()-3600);
在某些情况下,您应该为参数提供路径和域

事实上,如果您使用空字符串分配cookie,它也将被取消设置:

setcookie("key","");

这个问题的解决方案是,我需要设置正确的路径来取消设置cookie,因为我是从最初设置cookie的另一个文件中取消设置cookie的

通过在浏览器cookies中查找cookie,我找到了unset需要使用的路径。一旦在浏览器中找到cookie,路径就列在cookie附近。然后我将cookie的路径设置为:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages");
最后一个参数是路径。它成功了

我原来的
setcookie
如下所示:

setcookie("user_id", $user_id, time() + 7200, "");
使用此代码

  setcookie("CookieName", "", time()-(60*60*24), "/");

每次在每个网站上对我都有效

你的cookie应该是站点范围的吗?应该是吗?我怎么知道呢?不要用相对时间来表示不稳定的饼干。这使得不稳定取决于用户的时钟是否准确。使用时间
1
,这将捕获所有人,但那些认为是1970年的时钟确实坏了的人除外。如何将时间设置为1?这不安全。cookie可以很容易地编辑,在这种情况下,可以通过编辑cookie以任何用户的身份登录。您应该对cookie使用某种加密。我如何在本地主机上设置域?只需像示例“/”中的斜杠一样放一个斜杠,就是这样,这意味着此cookie可用于您的所有域。1是否被视为过去的时间?@arboles时间以UNIX时间戳的形式给出,所以是的,1是很久以前的:)1是“1月1日,19:70 00:01 AM”,更准确地说,它是“1月1日,19:70 00:01 AM UTC”。-)如果cookie的域不是默认域,那么您也必须将该域作为setcookie函数的第四个参数传递,因为一般来说,总是设置第三个(路径)和第四个(域)参数是好的。我知道,我目前正在使用此方法,但它不起作用。我目前正在使用相同的参数删除,就像我要设置的那样。它不起作用了,是的。这意味着将时间从当前时间设置为“昨天”。这就是答案。我喜欢一个更受欢迎的答案没有考虑到你设置了一个否定的时间,它没有被取消。这个答案更适合这个问题。谢谢