1

您好,我在此处发布的代码有问题(这是一个非常精简的版本,因此为清楚起见,省略了许多 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
4

3 回答 3

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
于 2012-06-25T12:06:36.397 回答
0

每次请求时,浏览器都会将 Cookie 发送到服务器。因为您仍在同一个请求中,所以尚未发送 cookie。

这就是为什么在同一个文件中(在同一个请求中)这不起作用:

$order_id = $_COOKIE["ID"]; // because the cookie hasn't been sent yet.

它看起来也没有必要,因为变量$order_id 已经包含订单 ID。

于 2012-06-24T12:34:42.173 回答
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(如果存在)。

于 2012-06-24T12:40:33.803 回答