2010-03-06 19 views
1
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不在那里。我不知道如果我忽略了一些东西,但我不能肯定这是怎么回事这里...我关闭标签后曲奇饼消失

任何帮助表示赞赏

+0

您确定cookie实际上包含值吗? –

+0

是否有可能会使某些过期Cookie的代码被无意中触发?也许你应该发布更多的代码? (我只是假设:) – karim79

+0

佩卡 - 是的。我确定他们是使用Firefox插件进行设置的,并且他们似乎正在工作。 Karim - 当你点击注销时,会运行唯一的代码,所以我认为这是不可能的。 = /。 – Andrew

回答

4

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

我明白了,明智地设置cookie路径和域是一个非常好的主意,而不是让PHP默认它。否则,来自mydomain.com的cookies将具有与www.mydomain.com不同的路径,并且可能导致www cookie不能从mydomain.com和其他有趣的东西中读取。我们现在总是明确地设置我们的cookies,在6个月的时间内浪费大概一周的开发时间,试图追踪这个问题。

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

+0

他们在我登录时设置(我正在使用该附件进行检查)时,我关闭并重新打开浏览器,并且它们未被设置。我删除了任何可能取消设置的代码,但它仍在发生。我将继续前进,稍后再回来,因为它真的开始浪费我的时间。 (这是一个周末的项目,反正不是什么大问题) – Andrew

+0

如果你想继续前进,没问题,但是你没有真正指出Web开发人员告诉你什么...是否正确设置了cookie过期?如果您向前移动一页,cookie也会消失吗? IE浏览器。去登录页面,发布登录表单,然后去网站上的任何其他页面?如果是这样,那么你意外删除了cookies。 –

+0

到期日期是准确的,当我更改页面时它们不会消失。现在如果我关闭标签并返回,它们将不会出现*除非*我刷新页面。 = /。当我关闭浏览器时,重新打开它,然后返回,它们将显示*直到我刷新。唯一可以取消设置的代码是在注销页面中,该页面只是将cookie设置为负值。所以,除非有其他方法来取消cookies或其他方式...... – Andrew

1

你描述提供给您的代码应工作是:

1 )没有任何其他服务器会干扰cookie的值 2)您还没有告诉您的浏览器将所有cookies当作会话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); 
?> 

C.

+0

使用您发布的代码对其进行测试,并且工作正常。这意味着我有一些代码或干扰,我猜。我会去看更多。 – Andrew