Cookie不会被取消

时间:2010-03-23 04:03:50

标签: php cookies

好吧,我很难过,并且已经盯着这几个小时了。

我在/access/login.php上设置了一个cookie,其代码如下:

setcookie('username', $username, time() + 604800, '/');

当我尝试注销时,它位于/access/logout.php(并重写为/ access / logout),cookie似乎不会被取消。我尝试了以下内容:

setcookie('username', false, time()-3600, '/');

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

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

我也尝试直接点击/access/logout.php,但它无效。

php日志中没有显示任何内容。

有什么建议吗?我不确定我是否遗漏了什么,或者发生了什么,但是这几个小时都在盯着这段代码并尝试调试。

9 个答案:

答案 0 :(得分:1)

您如何确定是否未设置?请记住,setcookie()不会将其从当前脚本的$ _COOKIE超全局中删除,因此如果您调用setcookie()取消设置,然后立即print_r($_COOKIE);,它将一直显示,直到您刷新页。

尝试在浏览器中粘贴javascript:alert(document.cookie);以验证您没有保存多个Cookie。清除您正在制作的域名的所有Cookie,以确保您重新开始。同时ini_set(E_ALL);以确保您没有遗漏任何通知。

答案 1 :(得分:1)

似乎是服务器问题。我的上一个域在PHP错误处理方面非常放松,而新域显示每个错误。我正在并排使用这两个站点,而旧站点会删除cookie。

答案 2 :(得分:0)

这里可能存在时区问题吗?您是否尝试过使用过去更远的东西,例如time() - (3600*24)? PHP的文档说,删除cookie的内部实现过去使用了一年的时间戳。

此外,您应该能够仅使用setcookie('username', false);而不传递到期时间戳,因为该参数是可选的。也许包括它在某种程度上混淆了PHP?

答案 3 :(得分:0)

如何在应用程序中使用Cookie数据?

如果您阅读了Cookie并检查用户名是否为false,则将其设置为false或''就足够了,因为您的应用程序将忽略Cookie值。

您最好在Cookie值中加入一些安全性,以防止用户更改其价值。您可以查看CodeIgniter会话库,了解CI如何使用哈希保护cookie值。将检测到未经授权的值更改,并且将删除cookie。

此外,CI执行此操作以终止cookie:

// Kill the cookie
    setcookie(
          $this->cookie_name,
          addslashes(serialize(array())),
          (time() - 31500000),
          $this->cookie_path,
          $this->cookie_domain,
          0
        );

答案 4 :(得分:0)

您也可以从javascript中删除Cookie。点击http://www.php.net/manual/en/function.setcookie.php#96599

答案 5 :(得分:0)

一种简单方便的方法,就是使用这个附加功能:

function getCookie($name) {        
    if (!isset($_COOKIE[$name])) return false;
    if ($_COOKIE[$name]=='null') $_COOKIE[$name]=false;
    return $_COOKIE[$name];
}

function removeCookie($name) {
    unset($_COOKIE[$name]);
    setcookie($name, "null");
}

删除cookie很简单:

removeCookie('MyCookie');
....
echo getCookie('MyCookie');

答案 6 :(得分:0)

我有类似的问题。

我发现,无论出于何种原因,回复logout.php中的内容使其实际上删除了cookie:

echo '{}';
setcookie('username', '', time()-3600, '/');

答案 7 :(得分:0)

我有同样的问题;我退出(并且我已经注销),手动重新加载index.php然后我再次登录。然后当我退出时,我已正确登出。

注销是一个简单的链接(index.php?task = logout)。该任务将用户从会话中删除,并且"删除" (设置值''并设置过去的到期时间)cookie,但index.php将在此(或所有)任务之后从cookie中读取用户的身份验证令牌(与正常情况一样)操作)。这将重新加载用户。加载页面后,浏览器将不显示身份验证令牌的cookie。因此我怀疑在页面加载完成后会写入cookie。

我的简单解决方案是在任务设置为注销时不读取cookie。

答案 8 :(得分:-2)

使用会话进行身份验证,不要使用原始cookie

http://www.php.net/manual/en/book.session.php