【问题标题】:Delete cookie using array key in PHP在 PHP 中使用数组键删除 cookie
【发布时间】:2017-06-01 11:40:10
【问题描述】:

只想知道如何在 PHP 上删除 cookie。 下面是$_COOKIES 的打印结果。 所以,我有一个购物车数组,按照它的建议存储信息,在我的 cart.php 文件中,我有一个按钮来删除议程或选项。

Array
(
    [cart] => Array
        (
            [90406_cart] => Array
                (
                    [id_agenda] => 7
                    [qty_agenda] => 3
                    [options] => Array
                        (
                            [28962_option] => Array
                                (
                                    [id_option] => 3
                                    [qty_option] => 1
                                )
                            [52058_option] => Array
                                (
                                    [id_option] => 4
                                    [qty_option] => 1
                                )
                            [70617_option] => Array
                                (
                                    [id_option] => 5
                                    [qty_option] => 1
                                )
                        )
                )
            [86953_cart] => Array
                (
                    [id_agenda] => 17
                    [qty_agenda] => 1
                )
        )
)

问题是如何从数组的父级到子级删除或取消设置此 cookie(假设我想删除带有键的议程:90406_cart52058_option)? Cookie 是在 Codeigniter 上使用此脚本构建的

$id_agenda = 1;

$qty_agenda = 20;

$option = array(1,2,3);

$qty_option = array(3,3,3);

$num = rand(10000,99999).'_cart';

$this->input->set_cookie('cart['.$num.'][id_agenda]',$id_agenda, 86400); 
$this->input->set_cookie('cart['.$num.'][qty_agenda]',$qty_agenda, 86400); 
for($i = 0; $i<count($id_option);$i++){     
    $num2 = rand(10000,99999).'_option';
    $this->input->set_cookie('cart['.$num.'][options]['.$num2.'][id_option]',$id_option[$i], 86400);        
    $this->input->set_cookie('cart['.$num.'][options]['.$num2.'][qty_option]',$qty_option[$i], 86400);      
}

【问题讨论】:

  • Cookies 无法处理太多数据,所以我认为您很快就会使用它来获得 cookie 限制
  • 是的,通常用例只有大约 2 或 3 个议程,每个议程最多 3 个选项,所以我认为应该没问题。 unset($_COOKIES['cart']['90406_cart']) 不工作。

标签: php arrays codeigniter cookies


【解决方案1】:

所以在 chrome 中使用 web 开发工具进行了一些实验后,我才意识到 cookie 是连续存储的:

cart[34705_cart][id_agenda] = 43
cart[34705_cart][qty_agenda] = 2
cart[34705_cart][options][12263_option][id_option] = 2
cart[34705_cart][options][12263_option][qty_option] = 4

这意味着它为每个数据存储在一行中,然后 PHP 将其全部读取为一个类型为 Array 的变量,这实际上不可能仅通过使用数组键(如 unset($_COOKIES['cart']['90406_cart'])$this-&gt;input-&gt;set_cookie('34705_cart') 。我想出的解决方案是这样的:

// delete all cookies for agenda and including any options on the agenda array
$array_key = '34705_cart';
$this->input->set_cookie('cart['.$array_key.'][id_agenda]'); 
$this->input->set_cookie('cart['.$array_key.'][qty_agenda]'); 
foreach($data[$array_key]['options'] as $key => $item){
    $this->input->set_cookie('cart['.$array_key.'][options]['.$key.'][id_option]'); 
    $this->input->set_cookie('cart['.$array_key.'][options]['.$key.'][qty_option]'); 
}

// delete option on the agenda
$array_key = '34705_cart';
$array_key2 = '12263_option';

$data = $this->input->cookie('cart');

$this->input->set_cookie('cart['.$array_key.'][options]['.$array_key2.'][id_option]');
$this->input->set_cookie('cart['.$array_key.'][options]['.$array_key2.'][qty_option]');
if(count($data[$array_key]['options'][$array_key2]) == 1){
    $this->input->set_cookie('cart['.$array_key.'][options]');
}

我希望这可以帮助那些可能在这种情况下陷入困境的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2018-01-21
    • 2012-01-02
    相关资源
    最近更新 更多