php:$ _COOKIE设置和阅读无法正常工作

时间:2012-06-24 12:21:53

标签: php cookies

你好,我在这里发布的代码存在问题(这是一个非常简化的版本,因此为了清晰起见省略了许多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

3 个答案:

答案 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