销毁在子目录中不起作用的cookie

Destroy cookie not working in sub directory

我想我可能对 cookie 不了解。当我点击一个按钮但 cookie 保留时,我试图销毁 cookie。我知道 cookie 的说明必须在 html 代码之前,所以我创建了一个没有 html 代码的新 php 页面,logout.php:

<?php

if (isset($_COOKIE['pseudocookie'])) {
    setcookie('pseudocookie', '', time()-300); 
}

if(session_id() == '') {
    session_start(); 
}

session_destroy();
session_unset();

header('Location: ../index.php'); ?>

我正在使用一个简单的按钮从 index.php 调用页面 :

<input type="button" id="ButSignout" value="Sign out" onclick="window.location.href='pages/logout.php'" />

我做了一些测试,php 页面加载良好,如果我尝试直接从 index.php 删除 cookie,它会起作用。我错过了什么?提前致谢。


Cookie 的创建方式:

setcookie('pseudocookie','Pseudo cookie',time()+$expire, null, null, false, true);

当我在没有 header 的 logout.php 中尝试此代码时,我可以看到打印的 cookie 的新值。

if (isset($_COOKIE['pseudocookie'])) {
    //setcookie('pseudocookie', '', time()-300); 

    echo "test";
    setcookie('pseudocookie','Cookie cookie',time()+3600);
    echo $_COOKIE['pseudocookie'];
    unset($_COOKIE['pseudocookie']);
}

但是当我回到 index.php 打印 cookie 的地方时,它显示了他的先前值。似乎在重新加载 index.php 时,cookie 会自动获取其先前的值,尽管 index.php 代码中没有 setcookie...

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

我认为问题可能出在您创建 cookie 的方式上。您使用了 null $path 而不是 /,因此该 cookie 在 /pages 可能不可用,因此您的 if (isset($_COOKIE['pseudocookie'])) 条件在 /pages/logout.php.

中失败

您可以通过在 if isset 中回显来验证这一点。