cookie不会令人失望

时间:2015-01-04 06:44:28

标签: php cookies

在我的登录脚本中,如果用户选择“请记住我”。它像这样设置cookie:

setcookie("a", $valuea, time()+2595000, "/");
setcookie("b", $valueb, time()+2595000, "/");

当用户(记住我')选择注销时,logout.php脚本通过以下方式取消设置cookie:

if(isset($_COOKIE['a']) && isset($_COOKIE['b'])){
setcookie("a","", time()-2595000, "/");
setcookie("b","", time()-2595000, "/");
setcookie(session_id(),"",time()-2595000, "/");
}

但是,注销后,用户被重定向到登录页面,登录页面通过以下代码检查用户登录状态:

if($_COOKIE['a']=='' || $_COOKIE['b']==''){
echo 'You are not logged in.'; 
}else{
echo 'You are logged in with remember me.Your cookie is: '.$_COOKIE['a'].' and '.$_COOKIE['b'];
}

但是我发现用户没有注销并且cookie显示有价值。 我不知道为什么setcookie没有清除cookie a和b的值。 有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您也可以使用会话:
喜欢这个记住我的功能:

session_start();
$_SESSION['a'] = "valuea";
$_SESSION['b'] = "valueb";


并在注销功能中:

session_unset();
session_destroy();
header("login.page")

要检查登录页面:

if(!isset(@_SESSION['a']) && !isset($_SESSION['b'])){
     echo "You are not logged in.";
}
else{
     echo "You are logged in with " . $_SESSION['a'] . 'and' . $_SESSION['b'];
}

答案 1 :(得分:1)

Atlast我发现了这个问题。 实际上在实际代码中,发生了什么,我在同一个注销页面中删除之后检查$ _COOKIE(不是在重定向到登录页面之后)。我忘记了cookie是由浏览器发送的,如果你没有转到下一页,那么你将无法看到cookie的变化。所以,如果你在logout.php中尝试这个:

//deletion of cookies
if(isset($_COOKIE['a']) && isset($_COOKIE['b'])){
setcookie("a","", time()-2595000, "/");
setcookie("b","", time()-2595000, "/");
setcookie(session_id(),"",time()-2595000, "/");
}

//checking the existence of cookies
if($_COOKIE['a']=='' || $_COOKIE['b']==''){
echo 'You are not logged in.'; 
}else{
echo 'You are logged in with remember me.Your cookie is: '.$_COOKIE['a'].' and '.$_COOKIE['b'];
}

然后它会给你错误的信息。虽然cookie已删除,但您会看到"您已登录..................."因为在logout.php中通过php获取的cookie将保留在php内存中,直到用户移动到下一页。如果您在下一个页面中检查是否存在这些cookie,那么您将看到没有cookie(这些已被删除。)

我的问题是所有专家,有没有办法在删除后反复检查cookie是否在同一页面中被删除?

答案 2 :(得分:0)

要在注销时清除您的Cookie,请仅通过传递Cookie名称来设置它们,没有值。

像这样:

setcookie('a');
setcookie('b');
setcookie(session_id());

答案 3 :(得分:0)

删除Cookie的正确方法是将到期日期设置为过去时间,并将值保留为空,如下所示。浏览器会自动删除此类cookie。此示例也在"Example #2 setcookie() delete example

上讨论

使用unset($_COOKIE['a'])将不起作用,因为它只会删除数组中的cookie值,并且下次加载页面时会再次出现。因此,更改不会影响浏览器的价值。

<?
    setcookie("a", "", time() - 3600);
?>