2012-04-17 125 views
3

我真的不知道问题在这里。setcookie不删除cookie

我有一个名为“login.php”的脚本,完美地工作。这就是所谓的AJAX,如果它成功返回时,页面刷新和用户登录,该Cookie设置页面上

setcookie("main", $row[0], time() + 3600, "/") 

然后我就被称为“logout.php”的脚本。它被称为相同的方式(AJAX,然后页面刷新)。它只有两行:

<?php 
    setcookie("main", "", time() - 3600, "/"); 
    echo "Done"; 
?> 

调用它形成页面不起作用,所以我只是在浏览器中加载logout.php。输出“完成”,但在Chrome浏览器中检查我的Cookie后,显示cookie仍设置为“1”($ row [0]),并在login.php中设置的时间到期。

login.php和logout.php都在同一个文件夹中,即根目录,与其他所有文件夹相同。

此前,这是工作,但我所做的唯一更改是使网站上的标题栏自己的文件(仍在根目录中),并采取注销按钮的JavaScript功能,这是只需一个AJAX调用和一些jQuery悬停效果,并将其创建为自己的脚本文件,该文件位于_js文件夹中。但我根本没有更改logout.php,所以当我直接导航到它时它应该仍然有效,对吧?我的setcookie命令有什么问题,或者其他问题可能导致它?

编辑:我试图设置它在100秒而不是-3600过期,然后尝试更改它的名称,以便我可以将其识别为完全单独的cookie。他们都没有出现。根本没有设置cookie。

编辑2:我恢复到最后一次提交,并且一切都再次工作。我不知道为什么通过创建一些新文件来重新组织我的网站(logout.php根本没有改变)会使某个脚本无法创建cookie。

+0

你确定你调用在同一个域?也许你设置www.domain.com Cookie,并要删除它在domain.com上? – 2012-04-17 16:07:26

+0

我把它们都设置在“/”上,所以它应该是同样的东西,对吧?它们都在同一个文件夹中 – 2012-04-17 16:09:36

+0

不,它是路径,域可能不同。在www.domain.com上设置cookie比它无法从domain.com访问,尽管他们是相同的域名,但理论上不是。因此,如果你在www.domain.com/login.php中设置域名,比注销php脚本必须从www.domain.com/logout.php调用而不是domain.com/logout.php – 2012-04-17 16:10:30

回答

3

必须在任何内容发送到客户端之前设置Cookie。确保在调用setcookie之前没有向客户端发送任何内容,因为它实际上是通过请求返回的Set-Cookie标头。

与include文件中的空间一样小的东西可能会毁掉它。 (你说你在处理其他文件,检查没有包含任何东西,例如括号内的调试回声或空白字符)

作为一般的经验法则,如果我有一个PHP代码专用的文件我只包含开始标记(<?php)并免除最后一个标记。 PHP仍然会解析并运行,但这样可以避免文件末尾有可能会出现问题的空白。例如

mycodefile.php

<?php 

    define('...', ...); 

    function ...(){ } 

另外,你提到使用Chrome。打开你的调试器中铬(CTRL + SHFT +),然后单击网络标签。然后找到您的登出电话并选择它,然后单击标头并验证您的Cookie正在清除。(同样可以点击资源饼干看,查看任何一组。

+0

是的,我同意,如果在<?php标记之前有空格或换行符,这将是原因。 – 2012-04-17 16:08:06

+0

logout.php就是这两行,所以我不认为在setcookie被调用之前,如果我直接导​​航到该页面,任何事情都不会被发送到客户端。没有任何空格,只有setcookie之前的选项卡。 – 2012-04-17 16:08:19