我有一个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)
我不确定这里是否缺少一步?
答案 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';
}
或者您可以使用击球手方法并使用getCookie
和setCookie
方法创建一个类。
此外,您没有为整个域设置Cookie,您可以通过/
作为setcookie
的第四个参数来实现:
setcookie("mi_clone_on_sale", "N", time() + $expiryTime, '/');
如果您未设置它,您的cookie将仅适用于脚本所在子目录中的当前目录。