我正在尝试在cookie中插入多个值,但我只能存储一个值。听到是我的代码。
<?php
session_start();
$rand= "SED".rand(10000,99999);
?>
<!doctype>
<html lang="en">
<body>
<form action="result4.php" method="post">
<input type="hidden" name="productid" value="<?=$rand?>">
<button type="submit">submit</button>
</form>
</body>
</html>
和我的result4.php
<?php
$cookie_name = "lastview";
$cookie_value = array($_POST['productid']);
$init = json_encode($cookie_value);
setcookie($cookie_name, $init, time() + (86400 * 30));
?>
<?php
echo count($_COOKIE["lastview"]);
echo '<pre>';
print_r($_COOKIE["lastview"]);
echo '</pre>';
?>
输出
1
["SED73204"]
我想要得到这个
5
["SED73204"]
["SED73507"]
["SED23207"]
["SED73286"]
["SED23294"]
答案 0 :(得分:2)
如上所述,检查cookie中是否存在值。如果是,则先提取,然后添加新值。
$cookie_name = "lastview";
// Set the cookie value from previous (if exists) or else an empty array
$cookie_value = (isset($_COOKIE[$cookie_name])) ?
json_decode($_COOKIE[$cookie_name]) : array();
// Add the new value to the array if one exists
if (isset($_POST['productid']) && is_numeric($_POST['productid'])) {
$cookie_value[] = $_POST['productid'];
}
// Set the cookie
setcookie($cookie_name, json_encode($cookie_value), time() + (86400 * 30));
您可能希望将is_numeric
此处的呼叫替换为preg_match
,以检查更具体的产品ID格式。例如:
if (preg_match('/^[\w]{3}[\d]{5}$/', $_POST['productid'])) { ... }
此外,您无法在与$_COOKIE
相同的执行周期中看到setcookie()
数组中的任何值。在查看$_COOKIE
数组中的填充值之前,您需要等待浏览器在下一个请求中发回cookie。
答案 1 :(得分:0)
你无法直接将数组存储到cookie中,
一种方法是序列化数据:
setcookie('cookie', serialize($cookie_value), time()+3600);
然后反序列化数据:
$data = unserialize($_COOKIE['cookie']);