php cookies更改未在同一域中获取

时间:2015-08-08 04:40:17

标签: php html cookies

我有一个UI页面,它收集各种值并将它们保存到数据库中。 我将其中一些值存储为后端创建/更新脚本中的cookie,这些值将在24小时后过期。

这方面的一个例子是:

    if (isset($_POST["clone_on_sale"])) {
        setcookie("mi_clone_on_sale", "Y", time() + $expiryTime);
    } else {
        setcookie("mi_clone_on_sale", "N", time() + $expiryTime);
    }

当我在UI中更改此clone_on_sale值并保存它时,后端脚本始终在$ _COOKIE变量中显示相同的值,即使我已经检查并且它正在命中正确的逻辑块并将它们设置为Y或者分别为N.

在UI页面中,它会选择这些cookie,并使用以下代码在显示中使用它们:

$cookieCloneOnSale = "N";
if (isset($_COOKIE["mi_clone_on_sale"])) {
 $cookieCloneOnSale = $_COOKIE["mi_clone_on_sale"];
}

在PHP代码中,$ _COOKIES没有更新:

array (
'mi_category' => '1',
'mi_auto_relist' => 'Y',
'mi_clone_on_sale' => 'Y', //<<always Y
'mi_refunds_allowed' => 'Y',
'mi_pct_for_charity' => '20',
'mi_price' => '12.00',
'mi_min_price' => '12.00'
)

但是,当我检查chrome中的域cookie时,我可以看到这些cookie实际上每次都正确更新。 (注意下面的clone_on_sale)

enter image description here

我不确定这里是否缺少一步?

1 个答案:

答案 0 :(得分:1)

setcookie()不会立即影响$_COOKIE数组,因为它只为当前请求设置了包含Cookie数据的标头。它们将在您的脚本的下一个请求中被选中。在当前请求期间,$_COOKIE将保持相同的状态。

我建议您将所有更新的数据存储在不同的类或数组中。最简单的解决方案是设置不同的数组以及设置cookie:

$cookieData = []
if (isset($_POST["clone_on_sale"])) {
    setcookie("mi_clone_on_sale", "Y", time() + $expiryTime);
    $cookieData['mi_clone_on_sale'] = 'Y';
} else {
    setcookie("mi_clone_on_sale", "N", time() + $expiryTime);
    $cookieData['mi_clone_on_sale'] = 'N';
}

或者您可以使用击球手方法并使用getCookiesetCookie方法创建一个类。

此外,您没有为整个域设置Cookie,您可以通过/作为setcookie的第四个参数来实现:

 setcookie("mi_clone_on_sale", "N", time() + $expiryTime, '/');

如果您未设置它,您的cookie将仅适用于脚本所在子目录中的当前目录。