Cookie没有在PHP中设置

时间:2012-10-07 08:46:50

标签: php session-cookies setcookie

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

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

这里'remember'是我用来设置cookie的复选框的id。 这里的问题是

  • 我无法在Chrome的资源标签上看到Cookie 点击“检查元素”。
  • 我无法看到任何回声。
  • 未设置Cookie。

此外,当一个人退出会话时,我无法删除会话cookie。 session_destroy();似乎没有做到这一点,因为Chrome仍会显示要设置为活动状态的Cookie。

如何解决这些问题?

4 个答案:

答案 0 :(得分:1)

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

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

所以基本上如果你使用setcookie,在下次刷新之前你还无法阅读$_COOKIE。这就是echo s没有显示任何内容的原因。他们正在显示NULL - 以确认此次使用var_dump,您将看到输出结果。

答案 1 :(得分:0)

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

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

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

如果要删除cookie,则必须将时间设置为以下时间

setcookie("loggedemail", "", time()-3600);

答案 2 :(得分:0)

session_destroy()没有取消设置会话ID的cookie,它只会破坏会话数据。

您说该复选框的ID属性为&#39;记住&#39; - 它有名称属性吗?如果不是这就是为什么一切都不起作用id不会发布到每个HTML定义的表单操作。

答案 3 :(得分:0)

如果你这样做:

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

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

关于您的第二个问题,session_destroy()会破坏会话,但不会使已发送给客户端的Cookie失效。您需要通过设置其到期时间来手动使它们失效。