如何在PHP中取消设置cookie?

arb*_*les 18 php cookies session session-cookies

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

这就是我目前正在取消它的方式,它似乎不起作用.

setcookie("user_id", $user_id, time() - 7200);
Run Code Online (Sandbox Code Playgroud)

这就是我设置它的方式:

setcookie("user_id", $user_id, time() + 7200);
Run Code Online (Sandbox Code Playgroud)

我调用set_session_from_cookie()了这个函数来检查是否设置了cookie,如果设置了cookie,它会使用cookie启动一个新会话.

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

我有这个功能的原因是如果用户想要在结束会话后被记住,他们可以通过调用cookie重新启动会话.

function set_session_from_cookie()
{
    if (isset($_SESSION['user_id'])) {
        echo '';
    } else {
        $_SESSION['user_id']=$_COOKIE['user_id'];
    }
}
Run Code Online (Sandbox Code Playgroud)

登出:

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

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

我用以下代码设置我的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');
    }
}
Run Code Online (Sandbox Code Playgroud)

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

FTh*_*son 28

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

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

这将导致cookie过期.

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

  • 1是"1月1日,19:70 00:00:01 AM" (14认同)
  • @arboles 时间以 UNIX 时间戳的形式给出,所以是的,1 是很久以前的 :) (2认同)
  • 更准确地说,1是"1月1日,19:70 00:00:01 UTC".:-) (2认同)

arb*_*les 12

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

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

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages");
Run Code Online (Sandbox Code Playgroud)

最后一个参数是路径.它奏效了.

我原来setcookie看起来像这样:

setcookie("user_id", $user_id, time() + 7200, "");
Run Code Online (Sandbox Code Playgroud)


moh*_*bou 6

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

setcookie("user_id", "", time()-10, "/");
Run Code Online (Sandbox Code Playgroud)

"loginform.php"不是有效域,这可能是此处的问题.


Mag*_*Guy 5

有关 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 ]]]]]] )
Run Code Online (Sandbox Code Playgroud)

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

由于将 cookie 设置为 FALSE 会尝试删除该 cookie,因此不应使用布尔值。相反,使用 0 表示 FALSE,使用 1 表示 TRUE。