0

我有一个简单的登录设置,我使用 cookie 来存储登录 ID #,并使用此 ID,可以显示用户名和其他信息。

因此,为了注销,我运行以下 php 脚本来注销:

<?php
if (isset($_COOKIE['id'])) {
setcookie("id","",1);
}
header("Location: redirectpage.html");
exit;
?>

这基本上使cookie过期。但是,当我到达重定向页面时,该页面具有以下代码:

If (isset($_COOKIE['id'])) {
//display "You are logged in already"
} else {
// show login form
}

它说我仍然登录,移动到不同的页面仍然说我已经登录,并且显示 cookie 值给了我一个实际值,这意味着 cookie 没有过期。我一定在这里遗漏了一些东西,但为什么 cookie 没有过期?

注意:我将过期日期从 time()-60 或某个值更改为 1,但这并没有改变任何内容,并且删除 if 语句以在每次 php 代码运行时使 cookie 过期仍然不能解决问题。

4

2 回答 2

0

尝试使用 if(!empty($_COOKIE... 因为 isset() 认为要设置空字符串。请参阅此表:http ://docs.php.net/manual/en/types.comparisons.php

于 2012-08-07T10:38:35.420 回答
0

确保您尝试使用创建它时使用的相同参数来删除 cookie。来自 php 手册,http ://gr2.php.net/setcookie ,在“常见陷阱”下:

必须使用与设置相同的参数来删除 Cookie。如果 value 参数是空字符串或 FALSE,并且所有其他参数都与先前对 setcookie 的调用匹配,则将从远程客户端删除具有指定名称的 cookie。这是通过将值设置为“已删除”并将到期时间设置为过去一年来在内部实现的。

于 2012-08-07T15:06:33.087 回答