在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。 这里的问题是
此外,当一个人退出会话时,我无法删除会话cookie。
session_destroy();
似乎没有做到这一点,因为Chrome仍会显示要设置为活动状态的Cookie。
如何解决这些问题?
答案 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失效。您需要通过设置其到期时间来手动使它们失效。