2014-11-05 163 views
0

因此,我尝试了多个其他“解决方案”,以解决我的问题(无论是在本网站还是其他网站上),无法找到适合我的解决方案。PHP cookie不会被取消设置/删除 - 无法注销

我想设置一个cookie来登录我的用户,然后在注销时删除该cookie。这是我的代码。

list ($check, $data) = check_login($dbc, $_POST['Username'], $_POST['Password']); 
    if ($check) { 
     setcookie('Username', $data['Username'], time() + 60*60*24*90); 
     header('Location: RedirectPage.php'); 

其中,检查用户名和密码已经输入的登录表单(并接受),如果是的话,cookie的“用户名”设置从数据库中提取用户名和时间等于90天,然后用户被重定向。

这部分工作正常,它会按照预期记录用户。

在删除部分

然而,

header('Refresh: 0;'); 

setcookie('Username', '', time() - 60*60*24*90); 
unset($_COOKIE['Username']); 
require ('RedirectPage.php'); 
redirect_user(); 

我删除它被设置,如预期一样饼干,删除任何数据和时间设置为负值,然后好措施我运行未设置的cookie以确保它已经消失。

除此之外,这不起作用。 setcookie(要删除)不会做任何事情,并且未设置的cookie只在页面运行后才起作用(在本例中为index.php),并且一旦我点击另一个页面或刷新页面时,它就会“忘记”该Cookie已被删除。

现在正在进入Chrome的检查元件检查Cookie我得到

Username, "Value" (the withdrawn username), r3gamers.com (domain),/(path), 2015-02-03T13:45:00 (Expires/MaxAge), 19 (Size) and HTTP and Secure are both set as empty. 

看着击中注销按钮之后的过程中,这个cookie是永远不会被删除。唯一可以实际删除cookie的是用新的cookie覆盖它(再次登录)或通过检查元素删除它。

任何想法?据我所知,我正在做所有应该做的事情。

编辑: 我也想提一下,当在localhost上通过netbeans离线测试这个功能时,这个功能确实有效。但是,当我上传页面给我的网站godaddy他们停止正常工作。

回答

3

我找到了答案。这也是一个愚蠢的回答。以下是我用于注销的完整代码文件。

<?php 

require_once ('Connection.php'); 

header('Refresh: 0;'); 

      if (!isset($_COOKIE['Username'])){ 
       header('Location: LoginFunctions.php'); 
      } else { 
       setcookie('Username', '', time()-60*60*24*90, '/', '', 0, 0); 
       unset($_COOKIE['Username']); 
       header('Location: index.php'); 
      } 


?> 

的问题,我不能在这里展示,是开放的PHP标签对一个单一换行符,这意味着它开始第2行为什么是这样开始我不知道,但那个小错误意味着它在localhost上工作,并没有在godaddy上工作。多么令人沮丧。至少我现在已经解决了这个问题。

对于未来的使用,对于那些陷入同样问题的人,显然godaddy(或大多数托管站点)要求从第1行开始添加,编辑或删除任何cookie,因此包含cookie的php标记必须打开第1行,没有html代码可以在这个php标签之前,或任何换行符,php标签必须在第1行开始。

+0

你的答案是有帮助的(Y)。但它不只是一个godaddy的东西。 – Eaweb 2018-02-08 01:26:02

0

你不设置您的Cookie的路径,我假设你希望它是整个网站的,所以你应该路径设置为“/”:

setcookie('Username', $data['Username'], time() + 60*60*24*90, '/');

,然后你重置时它,请尝试使用1而不是time() - 60*60*24*90(也还是指定路径),否则cookie的到期时间可能会根据用户的计算机时钟而变化:

setcookie('Username', '', 1, '/');

我想你r问题确实是未设置的路径:http://php.net/manual/en/function.setcookie.php

如果设置为'/',则cookie将在整个域中可用。如果设置为'/ foo /',则cookie将仅在/ foo /目录和所有子目录(如/ foo/bar/of域)中可用。默认值是设置Cookie的当前目录。

的事情是,如果你在/logout/doit.php,并尝试cookie的到期时间设置为负值,这将创建一个路径的新的cookie“/注销/”和设置其到期时间。 (而不是设置您的网站cookie的到期时间)

+0

这是我以前,我删除它,看看它会帮助,似乎有任何区别。 我现在已经完全按照您所说的添加了它,它对网站的行为没有任何影响。 – Spratters53 2014-11-05 14:40:42

+0

也许将它设置为'null'值也是...?从我在你的文章中看到的,cookie确实将自己设置为'/'路径...所以问题会与真正的问题有关它未被设置的方式。 – Naomi 2014-11-05 14:42:28

+0

再次,这是我以前试过的东西。只是再次测试它,它仍然和我在第一篇文章中提到的完全一样。 – Spratters53 2014-11-05 14:47:27