22

我需要弄清楚如何取消设置这个 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 重新启动会话?由于该功能似乎导致用户无法再注销。

4

6 回答 6

35

将 cookie 的过期日期设置为过去的某个时间(例如,在epoch之后一秒)。

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

这将导致 cookie 过期。

1用于代替0,因为0将 cookie 设置为在会话结束时过期。

于 2012-05-10T03:06:35.920 回答
14

这个问题的解决方案是我需要设置正确的路径来取消设置 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, "");
于 2012-05-10T05:05:51.977 回答
6

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

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

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

于 2012-05-10T03:09:57.040 回答
4

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

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,并且所有其他参数都与先前对 setcookie 的调用匹配,则将从远程客户端删除具有指定名称的 cookie。这是通过将值设置为“已删除”并将到期时间设置为过去一年来在内部实现的。

因为设置值为 FALSE 的 cookie 会尝试删除 cookie,所以不应使用布尔值。相反,使用 0 表示 FALSE,使用 1 表示 TRUE。

于 2012-05-10T03:09:21.373 回答
4

使用此代码

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

在每个网站上每次都为我工作

于 2013-01-11T14:09:49.853 回答
1

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

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

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

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

setcookie("key","");
于 2012-05-10T03:14:40.533 回答