我正在学习在PHP中使用cookie。我期待每次设置cookie时,cookie和所有变量都存储在客户端站点上,以便下次用户访问该站点时再次使用它们。无论如何在下一个例子中(带有登录选项的web应用程序,我使用cookie来存储一个唯一的字符串,这样我就可以实现“记住我”选项)我可以访问存储的cookie的id,但变量数据似乎丢失了。这是我使用的代码示例和我得到的截图。
if (isset($_POST['remember_me'])) {
$token=uniqid($_SESSION['id']);
$sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
$conn->query($sql);
setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
else{
setcookie("remember_me","",time()-1000);
}
在用户页面上,它只是打印出$ _COOKIE和$ _SESSION数组。
<?php
echo "SESSION: ";
print_r($_SESSION);
?>
<br>
<?php
echo "COOKIE: ";
print_r($_COOKIE);
?>
我出了什么问题以及为什么重新开放后的Cookie数组是空的?
第二次打开浏览器时,不会执行用于设置cookie的脚本。我只是将url设置为user-page.php。
示例:
/lhosthost/MIAFormApp/script/db/HTML_PROBA/user-page.html.php
答案 0 :(得分:0)
尝试删除示例代码中的else语句 - 意思是来自:
:此强>
if (isset($_POST['remember_me'])) {
$token=uniqid($_SESSION['id']);
$sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
$conn->query($sql);
setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
else{
setcookie("remember_me","",time()-1000);
}
到此
if (isset($_POST['remember_me'])) {
$token=uniqid($_SESSION['id']);
$sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
$conn->query($sql);
setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
当您重新打开浏览器时,if语句将检查是否找到POST变量 remember_me 。唯一可以找到的是当有人登录时,因为登录表单正在表单提交上发送该信息。在每个其他实例中(例如重新打开浏览器),将执行else语句,这不是您想要的。原因是在cookie上设置空值将delete said cookie.