Php 未删除Cookies

Php 未删除Cookies,php,cookies,Php,Cookies,奇怪的问题 这是index.php: session_start(); print_r($_COOKIE); print_r($_SESSION); 这是logout.php: session_destroy(); $_COOKIE['key'] = ""; $_COOKIE['usr_email'] = ""; setcookie("key", "", time() - 3600); setcookie("usr_email", "", time() - 3600); header("Loc

奇怪的问题

这是index.php:

session_start();
print_r($_COOKIE);
print_r($_SESSION);
这是logout.php:

session_destroy();
$_COOKIE['key'] = "";
$_COOKIE['usr_email'] = "";
setcookie("key", "", time() - 3600);
setcookie("usr_email", "", time() - 3600);
header("Location: http://www.site.net/index.php");
加载logout.php时,在重定向到index.php后,我得到:

Array
(
    [fc] => fcVal=6927578914025605120
    [PHPSESSID] => na015ipu3s69hhj00sgd0h1es6
)
Array
(
    [key] => cc2bffe0c1e36bc5790f5b78b11e5f50
    [usr_email] => myemail@gmail.com
)
当我加载index.php时生成会话时,会话是正常的,但是cookie如何仍然存在

注意

我在index.php上还有一些代码,用于确定登录表单是否已填写并开始验证用户,如果用户/密码正确,则设置两个会话变量和两个cookie变量(usr_电子邮件和密钥)

目前,我正在寻找登录表单,所以我有cookies和会话变量,由于cookies没有被删除,我禁用了索引页上的所有其他PHP代码,因为我认为可能有什么东西会自动让我登录。因此,目前我已经通过了身份验证,然后从索引页中注释掉了上面没有提到的其余内容

同样相关 这是我在对用户进行身份验证时设置cookie的方式:

    setcookie("key", $cookie['key'], time() + 36000);
    setcookie("usr_email", $cookie['usr_email'], time() + 36000);
PHP版本:PHP5.3.6-13

上次编辑


正如Josh在评论中所写,我把cookie打印与会话混淆了,我无法删除会话变量而不是cookie变量。

您是否在子目录中创建cookie?如果是,请确保已添加cookie路径。这里有一个例子

setcookie("usr_email", "", time() - 3600, '/directory-name/');
从:

。。。[session_destroy()]不会取消设置与会话关联的任何全局变量 会话,或取消设置会话cookie

为了完全终止会话,如要注销用户,,则 会话id也必须取消设置。如果使用cookie来传播 会话id(默认行为),则会话cookie必须为 删除。setcookie()可用于此目的

注意:
PHPSESSID
是传播会话ID的cookie

请尝试以下操作以清除重复使用的会话变量:

// Example #1 Destroying a session with $_SESSION
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();

注意:
会话_start()
必须在
会话_destroy()
可以工作之前调用。

您是否尝试过
退出
在标题后隐藏脚本:Location?@TimWolla-刚刚尝试过,不会更改任何内容。请勿使用cookie删除时间戳的相对时间。这假定用户的时钟(相对)准确。设置一个固定的“1970年1月1日00:00:00 GMT”类型的时间戳,这样即使是时钟完全坏掉的机器也应该遵守它。@MarcB会这样做的,谢谢!然而,这里的情况并非如此,即使我使用
$\u COOKIE['usr\u email']=''
清空COOKIE,我仍然可以看到redirectIn index.php之后的值,您有COOKIE,然后会话变量,打印到屏幕上。会话中的
usr\u电子邮件
不是按照您打印它们的顺序进行的吗?不在饼干里?