Php新的cookie会覆盖以前的cookie



在一个网店产品页面中,我用ajax将产品id发送到这个php文件:

<?php
include_once("connect.php");
if(isset($_POST['product_id']))
{
$product_id = mysqli_real_escape_string($kapcs, $_POST['product_id']);
$cookie_name = "kedvenc_termek";
$cookie_value = $product_id;
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
echo 'Saved to the favorit products.';
}
?>

我的问题是,当我在kedvenc_termek cookie中有id-s,并且我想添加另一个产品id作为最喜欢的产品时,新的cookie值将覆盖cookie中的值。

例如,如果我在cookie中存储了179,并且我将180产品id添加到其中,则cookie值将为180,而不是179180。

您每次都会覆盖该值。所以你需要附加值,而不是覆盖它

$cookie_name = "kedvenc_termek";
$cookie_value = '';
if(isset($_COOKIE[$cookie_name])) {
$cookie_value = $_COOKIE[$cookie_name] . ',';
}
$cookie_value .= $product_id;
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");

您需要使用一个数组来保存数据。您可以使用PHP的serialize()方法将数组数据保存为字符串,并使用unserialize()读取数据。试试这个:

<?php
include_once("connect.php");
if(isset($_POST['product_id']) && is_int($_POST['product_id'])) {
$product_id = $_POST['product_id'];
$cookie_name = "kedvenc_termek";
$data = unserialize($_COOKIE[$cookie_name]);
if(!in_array($product_id, $data)) {
$data[] = $product_id;
}
setcookie($cookie_name, serialize($data), time() + (86400 * 30), "/");
echo 'Saved to the favorite products.';    
}
?>

相关内容

最新更新