如何在PHP中取消设置cookie?

时间:2012-05-10 02:58:03

标签: php session cookies session-cookies

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

这就是我目前正在取消它的方式,它似乎无法正常工作。

setcookie("user_id", $user_id, time() - 7200);

这就是我设置的方式:

setcookie("user_id", $user_id, time() + 7200);

我有一个名为set_session_from_cookie()的函数,用于检查cookie是否已设置,如果已设置,则使用cookie启动新会话。

问题是当我在我的页面上使用它时,我无法注销。我认为这是因为我无法取消会话。

我有这个功能的原因是,如果用户想要在结束会话后被记住,他们可以通过调用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:

if ($rememberme == "on") {
    $user_id = mysql_result($query_run, 0, 'id');
    setcookie("user_id", $user_id, time() + 7200);
    $_SESSION['user_id'] = $user_id;
    redirect('home_page.php');
} else {
    if ($rememberme == "") {
        echo 'ok';
        $user_id = mysql_result($query_run, 0, 'id');
        echo $user_id;
        $_SESSION['user_id'] = $user_id;
        redirect('home_page.php');
    }
}

如何在不使用我创建的功能的情况下使用保存的cookie重新启动会话?由于该功能似乎导致用户无法再注销。

6 个答案:

答案 0 :(得分:28)

将Cookie的到期日期设置为过去的时间(例如,epoch之后的一秒)。

setcookie("yourCookie", "yourValue", 1);

这会导致Cookie过期。

使用

1代替0,因为0将Cookie设置为在会话结束时到期。

答案 1 :(得分:10)

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

我通过在浏览器cookie中查找cookie找到了我需要使用哪条路径,一旦我在浏览器中找到了cookie,就会在cookie附近列出路径。所以我然后像这样设置cookie的路径:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages");

最后一个参数是路径。它起作用了。

我原来的setcookie看起来像这样:

setcookie("user_id", $user_id, time() + 7200, "");

答案 2 :(得分:6)

关于您的代码几乎没有安全问题,但是要回答您的问题,要在php中取消设置cookie,您需要做的就是将过期时间设置为过去的时间:

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

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

答案 3 :(得分:4)

使用此代码

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

每次在我的网站上为我工作

答案 4 :(得分:3)

有关setcookie

的信息,请参阅php手册

http://php.net/manual/en/function.setcookie.php

这些说明应该解释这个过程:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
  

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

     

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

答案 5 :(得分:1)

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

setcookie("key","",time()-3600);

在某些情况下,您应该为参数提供路径和域。

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

setcookie("key","");