在我的登录脚本中,如果用户选择“请记住我”。它像这样设置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的值。 有什么想法吗?
答案 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);
?>