关闭标签后,Cookie消失了

时间:2010-03-06 23:42:43

标签: php cookies

if(isset($_POST['remember'])) {
    if(!isset($_COOKIE['tracker_id'])) {
        setcookie('tracker_id', $_SESSION['id'], time()+2592000);
        setcookie('tracker_username', $_SESSION['username'], time()+2592000);
        setcookie('tracker_rsn', $_SESSION['rsn'], time()+2592000);
    }
}

我知道代码有效,因为我在登录前检查是否有cookie,但没有。我登录,有饼干。我关闭选项卡(而不是浏览器),在新选项卡中重新打开它,并且cookie不在那里。我不确定我是否忽略了某些东西,但我不太确定这里有什么......

感谢任何帮助

2 个答案:

答案 0 :(得分:4)

您是如何检查饼干是否存在?检查cookies数组并不能告诉你整个故事。如果您还没有,请下载Web Developer Addon for FireFox。它具有查看,编辑和删除您所在站点的cookie的功能。登录后查看您的cookie。这将使您深入了解浏览器实际设置的内容。然后关闭浏览器并再次打开,访问网站,然后再次查看Cookie。看看他们是否还在那里,只是没有被阅读。

我已经学到了很难,明确地设置cookie路径和域而不是让PHP默认它是一个非常好的主意。否则来自mydomain.com的cookie将具有与www.mydomain.com不同的路径,这可能导致无法从mydomain.com和其他有趣的东西读取www cookie。我们现在总是明确设置我们的cookie,浪费了大约一个星期的开发时间,在6个月的时间内试图追踪该问题。

如果路径不是问题,您可能会无意中删除Cookie。在运行该代码时,您从SESSION传入的值是否始终存在? false值告诉PHP删除cookie,如果数组中没有定义值并且您没有强大的错误报告级别,则可能会意外发生。

答案 1 :(得分:1)

您的代码应该如您所描述的那样工作:

1)没有其他服务器端干扰cookie的值 2)您尚未告知浏览器将所有cookie视为会话cookie

您是否使用设置和读取Cookie所需的最少代码构建了测试平台?从您发布的代码段开始,您的代码中显然会有更多内容。并尝试在不同的浏览器中测试它。

类似的东西:

<?php

if ($_GET['set') {
   setcookie('tracker_id', 'tracker_id set at ' . date('r'), time()+2592000);
   setcookie('tracker_username', 'tracker_username set at ' . date('r'), time()+2592000);
   setcookie('tracker_rsn', 'tracker_rsn set at ' . date('r'), time()+2592000);
}
print_r($_COOKIE);
?>

下进行。