饼干不是取消设置的


cookie is not unsetting

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

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

当用户(使用"记住我")选择注销时,注销.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 的值。知道吗?

您也可以使用会话:像在记住我函数中这样:

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'];
}

最后我发现了问题。实际上在实际代码中,发生了什么,我在同一注销页面中删除后(而不是重定向到登录页面后)检查了 $_COOKIE。我忘记了 cookie 是由浏览器发送的,如果您不转到下一页,您将看不到 cookie 中的更改。因此,如果您在注销中尝试此操作.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 被删除,但您会看到"您已登录.................."。因为 PHP 在注销时获取的 cookie .php将保留在 PHP 内存中,直到用户移动到下一页。如果您在下一页中检查这些 cookie 是否存在,那么您会看到没有 cookie(这些 cookie 确实被删除了)。

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

要在注销时清除 Cookie,请通过仅传递 Cookie 名称(不传递值)来设置它们。

喜欢这个:

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

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

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

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