你好,我在这里发布的代码存在问题(这是一个非常简化的版本,因此为了清晰起见省略了许多html内容)。 目标是:它检查cookie是否存在并填充它。 如果全局可变$ _POST为空,则检查cookie是否存在或由于某种原因是空的。如果cookie不存在或者是空的;它创造了一个。 然后在HTML表单之前显示内容
单击提交表单后,页面会自行调用,当然还会填写$ _POST。因此代码的后半部分会读取并显示cookie的内容。
在我调用页面的现实中,创建了cookie(我用浏览器检查过),但是没有显示第一个读数! 如果我点击提交,我会读取cookie的内容,或者如果我用F5刷新页面,它会显示它。
但是当我将页面加载到“第一”时间时。
请你帮我找一下我弄错的地方?
if (!$_POST) {
// Create Cookie
if (!isset($_COOKIE["ID"]) || ($_COOKIE["ID"] != true)){
$order_id = time();
$lifetime = 600;
setcookie("ID",$order_id,time()+$lifetime);
}//End IF "create cookie"
...
...
...
$order_id = $_COOKIE["ID"];
echo $pag = <<< FORM
$order_id
<form action="page.php" method="post">
...
...
<input type="submit">
</form>
FORM;
} elseif ($_POST) {
// Read Cookie for Contract
echo $order_id = $_COOKIE["ID"];
echo $order_id_date = date('l jS \of F Y');
...
...
...
setcookie("ID","",-50000);
} // End IF ELSEIF
答案 0 :(得分:0)
每次请求时,浏览器都会将Cookie发送到服务器。因为您仍然在同一个请求中,所以还没有发送cookie。
这就是为什么在同一个文件中(在同一个请求中)这不起作用的原因:
$order_id = $_COOKIE["ID"]; // because the cookie hasn't been sent yet.
它也看起来没有必要,因为变量$order_id
已经包含订单ID。
答案 1 :(得分:0)
如果以这种方式进行设置会更好。
$order_id = time();
if(isset($_COOKIE['ID']) && !empty($_COOKIE['ID'])) {
$order_id = $_COOKIE['ID'];
} else {
$lifetime = 600;
setcookie('ID', $order_id, time() + $lifetime);
}
因此,您始终设置订单ID,然后将其替换为Cookie ID(如果存在)。
答案 2 :(得分:0)
我找到了解决方案。这是一个转变。 而不是像我创建的那样的cookie,我使用了会话。有用 我想在这里报告代码:
session_start();
if (!$_POST) {
if ((!isset($_SESSION['order_id'])) or $_SESSION['order_id'] != true ){
$order_id_time = time(); // Assign variables
$_SESSION['order_id'] = $order_id_time;
}
$order_id_date = date('l jS \of F Y');
$order_id = $_SESSION['order_id'];
...
...
...
echo $pag = <<< FORM
$order_id
<form action="page.php" method="post">
...
...
<input type="submit">
</form>
FORM;
} elseif ($_POST) {
// Read Cookie for Contract
echo $cook = "Order ID: ".$_SESSION["order_id"]."<br /><br />";
...
...
...
session_destroy();
} // End IF ELSEIF