Chrome不会删除Cookie?

3

我有一个脚本用于注销用户(logout.php),在Firefox和IE中它运行得非常好,但是在Chrome中,即使关闭了浏览器,cookie仍然可用。

我使用以下代码进行测试:

logout.php

session_start();
$_SESSION['un'] = '';
$_SESSION['pw'] = '';
unset($_SESSION['un']);
unset($_SESSION['pw']);
setcookie("spf", "", time()-3600);
session_destroy();
echo "Cookie: ".$_COOKIE['spf']."<br />";
echo "Session: ".$_SESSION['un'];

在Chrome中,尽管进行了一切设置,它仍会输出SPF内容。我做错了什么?
编辑:
在FF中,我的测试页面会输出以下内容:
Cookie: 

Session:

例如,两侧留白。
在Chrome浏览器中会显示如下信息:
Cookie: {\"un\":\"test3333\",\"pw\":\"593c114983263124656dd6bb922b7bd8\"}

Session:

(例如,cookie有内容而会话为空。)

1
指定cookie路径,例如:setcookie('spf', '', time()-3600, '/')。 - maximkou
2
我不确定你所说的Chrome回显旧的cookie值是什么意思,你的echo语句会在它们到达Chrome之前就回显PHP认为的cookie值...? - Joachim Isaksson
2个回答

0

你可以尝试:

$_SESSION=array(); // assign an empty array to the session

或者

session_unset();     // unset $_SESSION variable for the run-time, frees all session variables currently registered.  

信息

然后:

session_destroy();   // destroy session data in storage

注意: session_destroy()会销毁与当前会话相关的所有数据。它不会取消与会话关联的任何全局变量,也不会取消会话cookie。要再次使用会话变量,必须调用session_start()。

为了完全终止会话并使用session_destroy(),例如注销用户,还必须取消会话ID。如果使用cookie传播会话ID(默认行为),则必须删除会话cookie。可以使用setcookie()进行操作。

摘自: INFO

更新:

那么我认为您需要这个,注意spf是cookie的名称

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

如果它是一个数组,将名称更改为spf[one],例如:
setcookie ("spf[un]", "", time() - 3600);

请看这里


谢谢,但它真的不会消失。我可以轻松地在Chrome 中设置普通 cookies 并销毁它们,但是对于这个 Cookie 却不行。如果我使用 print_r($_COOKIE); 它将输出 "Array ( [spf] => {"un":"test3333","pw":"593c114983263124656dd6bb922b7bd8"} )"。 - Emily Adler
更新:终于有了一些进展。如果我使用这个“setcookie("spf[un]","somethingcookietwo");”,我将成功地将spf中的un值更改为somethingcookietwo。而将其设置为空将完全删除该值。但是数组仍然存在。 - Emily Adler

0

将日期设置为过去的时间,这样就可以解决问题了,同时别忘了添加路径以便删除正确的内容。

setcookie('your_cookie', '', time()-3600,'/');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接