我想将值添加到cookie内的现有数组变量中。
当前,我使用Ajax设置cookie:
Ajax:
function setcookie(productid){
$.ajax({
type: 'POST',
url: "setcookies.php",
data: {
id: "productid"
},
success: function (e) {
alert(e);
}
});
}
PHP setcookies.php
<?php
$cookiename = "products";
$cart = array();
$pid = $_POST['id'];
array_push($cart, $pid);
setcookie($cookiename, serialize($cart), time() + 3600, "/");
$_COOKIE[$cookiename] = serialize($cart);
当我单击添加产品按钮时,将调用setcookie()函数。单击添加产品按钮三次,我希望应将3个产品ID添加到cookie数组,但是当我访问将在页面中显示cookie的页面时,它只会显示最后添加的productid。
预先感谢您。
编辑我的工作代码:
下面的代码对我有效:只需稍微修改一下Dominique回答的代码即可。
$cookiename = "products";
$cart = null;
$pid = $_POST['id'];
if (!empty($_COOKIE[$cookiename])) {
$cart = unserialize($_COOKIE[$cookiename]);
array_push($cart, $pid);
} else {
$cart = array();
array_push($cart, $pid);
}
setcookie($cookiename, serialize($cart), time() + 3600, "/");
$_COOKIE[$cookiename] = serialize($cart);
在您的代码中,您将$ cart实例化为包含0个元素的数组,并将其放入$ _COOKIE ['products']中,这样它将删除现有内容。
它将解释为什么只能有一个带有简单元素的数组。
此代码应可用
<?php
$cookiename = "products";
$cart = array();
if(!empty($_COOKIE[$cookiename])) {
$cart = json_decode($_COOKIE[$cookiename], true);
}
$pid = $_POST['id'];
array_push($cart, $pid);
setcookie($cookiename, json_encode($cart), time() + 3600, "/");
$_COOKIE[$cookiename] = json_encode($cart);
<?php
$pid = $_POST['id'];
$cookiename = "products";
$cart = array();
if(isset($_COOKIE[$cookiename]) && !empty($_COOKIE[$cookiename])) {
$cart = unserialize(base64_decode($_COOKIE[$cookiename]));
}
array_push($cart, $pid);
setcookie($cookiename, base64_encode(serialize($cart)), time() + 3600, "/");
//Your Cookie data output
$_COOKIE[$cookiename] = serialize($cart);