0

在 PHP 中设置 cookie 有问题。如果选中复选框,这是我用来设置 cookie 的代码。

<?php 
    if(isset($_POST['remember'])){
    setcookie("loggedemail",$email,"time()+3600","/");
    setcookie("loggedpassword",$password,"time()+3600","/");
    echo $_COOKIE['loggedemail'];
    echo $_COOKIE['loggedpassword'];
}
?>

这里的“记住”是我用来设置 cookie 的复选框的 ID。这里的问题是

  • 单击“检查元素”时,我无法在 chrome 的资源选项卡上看到 cookie。
  • 我看不到任何回声。
  • 未设置 cookie。

此外,当有人退出会话时,我无法删除会话 cookie。 session_destroy();似乎没有起作用,因为 Chrome 仍然显示要设置为活动的 cookie。

我该如何解决这些问题?

4

4 回答 4

1

如果你这样做:

setCookie("cookieName", "value", time() + 3600);

它必须工作(如果您没有更改任何浏览器设置)。但是,该变量在页面的下一次加载之前不可用。不过,您应该能够在 Chrome 开发工具中看到它。如果没有,请确保 100% 在设置 cookie 之前没有输出任何内容。

关于你的第二个问题,session_destroy()销毁一个会话,但它不会使已经发送到客户端的 cookie 无效。您需要通过设置它们的到期时间来手动使它们失效。

于 2012-10-07T09:11:01.647 回答
1

的值$_COOKIE是通过读取从浏览器接收到的 cookie 来设置的。

为了从浏览器接收 cookie,它必须是:在 PHP 中设置 -> 浏览器应该加载 -> 用户应该导航到下一页(或提交表单)。

所以基本上如果你使用setcookie你还不能阅读$_COOKIE,直到下一次刷新。这就是为什么echos 没有显示任何内容。他们正在展示NULL- 确认此用途var_dump,您将看到输出。

于 2012-10-07T09:12:04.323 回答
0

您将时间作为字符串传递。这是问题所以改变你的PHP代码如下

setcookie("loggedemail",$email,time()+3600,"/");
setcookie("loggedpassword",$password,time()+3600,"/");

Cookie 不是会话的一部分,因此您不能使用 session_destroy()。

如果要删除cookie,则必须将时间设置为过去时间,如下所示

setcookie("loggedemail", "", time()-3600);
于 2012-10-07T08:51:39.113 回答
0

session_destroy()不会取消设置其中包含会话 ID 的 cookie,它只会丢弃会话数据。

您说复选框具有“记住”的 id 属性 - 它是否具有名称属性?如果不是这就是为什么一切都无法正常工作的原因,ID 不会发布到每个 HTML 定义的表单操作中。

于 2012-10-07T08:53:00.363 回答