饼干没有立即设置

时间:2012-05-23 13:29:08

标签: codeigniter cookies

我有一个购物篮cookie,在将产品添加到购物篮之前,该功能会检查是否存在cookie或是否需要新的cookie。这在一次添加一个项目时工作正常,但有时同时添加多个项目。如果旧的篮子饼干存在,这可以正常工作。问题是当没有篮子cookie并且函数必须创建一个。

第一次通过时,会创建cookie,并添加数据库记录等。

我们第二次检查功能,检查cookie没有找到cookie,另外创建了cookie等等。

  $this->db->select('basket_id');
  $this->db->from($this->basket_table);
  $this->db->where('basket_id', get_cookie('basket_id'));
  $check_basket = $this->db->get();

 if($check_basket->num_rows > 0){
   $basket_exists = 1;
 }else{
   $basket_exists = 0;
 }

 if($basket_exists == 0){
  delete_cookie('basket_id');

  $basket = array(
   'lang_id' => $lang_id,
   'currency_id'  => $currency_id,
   'customer_id'  => $customer_id,
  );

  $this->db->insert($this->basket_table, $basket);
  $basket_id =  $this->db->insert_id();;

  $cookie  = array(
   'name' => 'basket_id',
   'value' => $basket_id,
   'expire' => 60*60*24*30,
   'domain' => 'REMOVED'
   'path' => '/',
   'prefix' => '',
  );

  set_cookie($cookie);
}else{
  $basket_id = get_cookie('basket_id');
}

1 个答案:

答案 0 :(得分:1)

为了设置cookie,你需要将它发送到浏览器,但是如果你的函数在创建视图之前多次循环,这种情况就不会发生。

所以在使用购物篮之前设置cookie,或者只检查cookie是否需要设置一次,如下所示:

  $this->db->select('basket_id');
  $this->db->from($this->basket_table);
  $this->db->where('basket_id', get_cookie('basket_id'));
  $check_basket = $this->db->get();

 if($check_basket->num_rows > 0) { 

  $basket = array(
   'lang_id' => $lang_id,
   'currency_id'  => $currency_id,
   'customer_id'  => $customer_id,
  );

  $this->db->insert($this->basket_table, $basket);
  $basket_id =  $this->db->insert_id();

  $cookie  = array(
   'name' => 'basket_id',
   'value' => $basket_id,
   'expire' => 60*60*24*30,
   'domain' => 'REMOVED'
   'path' => '/',
   'prefix' => '',
  );

  set_cookie($cookie);
}

// Now run your basket logic here - knowing the cookie is setup

}