php - PHP cookie 设置后无法正常工作
问题描述
我是 cookie 的新手,并试图搜索我的问题,但找不到。
我的代码:
索引.php
<?php
if (isset($_GET["submit"])) {
setcookie("time",date('Y/m/d H:i:s'),time()+3600);
echo $_COOKIE["time"];
}
//Look if cookie isset, if not open overlay.
if (isset($_COOKIE["time"])) {
echo "<body>";
} else {
echo "<body onload='toggleOverlay(0)'>";
}
?>
当您在浏览器中打开页面时,执行了 php 代码的底部部分,不应该有 cookie 'time',因此主体将与 onload="toggleoverlay()" 相呼应。这一切都很好。
然后当我点击提交按钮接受cookies时,页面重新加载,我的php代码的上半部分被执行,一个名为'time'的cookie被创建为当前时间。
然后应该执行底部部分,但它仍然与 onload 呼应主体,即使我刚刚创建了 cookie。
当我尝试回显 cookie 时,我也会收到错误消息(说 cookie 不存在)。当我再次手动重新加载页面时,它可以工作。但这非常令人沮丧,因为您需要接受 cookie。然后页面被重新加载,覆盖再次打开。
我认为这是因为创建 cookie 需要一些时间,然后其他代码已经执行,但是有人知道如何解决这个问题吗?
提前致谢。
解决方案
在将响应发送回客户端(浏览器)之前,不会设置 cookie。它在您的 PHP 中不可用,直到之后来自客户端的下一个请求。
你可以做下一个。
<?php
$cookie_set = isset($_COOKIE['time']);
if (!$cookie_set && isset($_GET['submit']) {
setcookie('time', date('Y/m/d H:i:s'), time() + 3600);
$cookie_set = true;
}
if ($cookie_set) {
echo '<body>';
} else {
echo '<body onload="toggleOverlay(0)">';
}
推荐阅读
- c - uint16_t 与 printf 值的差异
- angular - ngx-translate 不适用于延迟加载的模块
- php - PHP XSL:键“匹配”模式编译失败
- elasticsearch - Logstash 错误:解析 xml 文件
- c# - 如何使用 C# 异步方法重载和返回多种类型?
- python - 如何在分页中单击箭头元素,这会引发通过 WebDriverWait 不可见的元素
- python - 在 cron 中使用子进程执行命令时出现命令未找到错误
- node.js - 无法使用带有快速服务器的 html-webpack-plugin 访问动态 html
- javascript - 在 addEventListener 中调用函数而不隐式传递事件对象
- ruby-on-rails - Rails 工作正常,但在 heroku 中不行