【问题标题】:php cookie and or set cookie issuephp cookie 和/或设置 cookie 问题
【发布时间】: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


【解决方案1】:

cookie 的大小可能是问题。

来自this answer

LimitRequestLine
该指令设置 HTTP 请求行上允许的字节数。 LimitRequestLine 指令允许服务器管理员减少或增加对客户端 HTTP 请求行的允许大小的限制。由于请求行由 HTTP 方法、URI 和协议版本组成,因此 LimitRequestLine 指令对服务器上请求所允许的请求 URI 的长度进行了限制。服务器需要此值足够大以容纳其任何资源名称,包括可能在 GET 请求的查询部分中传递的任何信息。
该指令使服务器管理员可以更好地控制异常的客户端请求行为,这可能有助于避免某些形式的拒绝服务攻击。

联系服务提供商可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多