我在/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日志中没有显示任何内容。
有什么建议吗?我不确定我是否遗漏了什么,或者发生了什么,但是这几个小时都在盯着这段代码并尝试调试。
答案 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