【发布时间】:2020-03-30 00:11:29
【问题描述】:
对不起我的英语,我的网站上有一个未知问题:
我尝试将购物车保存在 cookie 中:
保存前cookie的var_dump:
代码:
array (size=3)
'name' => string 'cart'
'value' => string '[{"id":"13991","id_prod":"18176","qty":1,"gravure":"","options_infos":[],"cadeau":0},{"id":"13983","id_prod":"18168","qty":1,"gravure":"","options_infos":[],"cadeau":0},{"id":"13987","id_prod":"18172","qty":1,"gravure":"","options_infos":[],"cadeau":0},{"id":"279543","id_prod":"29990","qty":1,"gravure":"","options_infos":[],"cadeau":0},{"id":"279554","id_prod":"30001","qty":1,"gravure":"","options_infos":[],"cadeau":0},{"id":"279539","id_prod":"29986","qty":1,"grav ure":"","options_infos":[],"cadeau":0},{"id'... (length=3301)
'expire' => int 2592000
在我的页面上触发了这个 php 函数来更新 cookie 车, 当我的购物车中有超过 20 件商品时,这就是阻碍
PHP 代码:
public function refreshCookie() {
$items = array();
if (parent::contents()) {
foreach (parent::contents() as $key => $value) {
$prod = new stdClass();
$prod->id = $value['id'];
$prod->id_prod = $value['id_prod'];
$prod->qty = $value['qty'];
if (isset($value['gravure'])){
$prod->gravure = $value['gravure'];
}
if (isset($value['options_infos'])){
$prod->options_infos = $value['options_infos'];
}
$prod->cadeau = $value['cadeau'];
$items[] = $prod;
}
}
$cookie = array(
'name' => 'cart',
'value' => json_encode($items),
'expire' => $this->CI->config->item('cookie_panier_lifetime')
);
$this->CI->input->set_cookie($cookie);
}
这在我的本地机器上工作正常,但当我有超过 20 个项目时不能在线
它工作,如果我删除set_cookie 行($this->CI->input->set_cookie($cookie);)
另请注意,如果我使用 php setcookie 它是相同的,所以这不是真正的代码点火器问题:/
我不明白,任何帮助将不胜感激 问候
【问题讨论】:
-
不要将所有内容存储在 cookie 中。有 cookie 限制是有原因的。将所有购物车放入服务器端数据库,并且只有 cookie 应该通过密钥引用购物车项目(还有一些更强大的安全性和访问令牌)。
-
cookie 大小通常限制在 4KiB 左右,所以如果这大约是您购物车的最大大小,那么这可能就是原因。
-
你好,这个 cookie 只是用来保存购物车并在用户在会话关闭后返回时加载它我不明白为什么我的本地机器上没有限制(测试 +100项目),我的服务器上只有 20 个
标签: php codeigniter cookies