PHP新Cookie会覆盖之前的Cookie

时间:2018-12-09 17:44:27

标签: php cookies

在网上商店的产品页面中,我将带有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。

2 个答案:

答案 0 :(得分:0)

您需要使用数组来保存数据。您可以使用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.';    
}
?>

答案 1 :(得分:0)

您每次都覆盖值。因此,您需要附加值,而不要覆盖它

$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), "/");