问题删除会话变量

Posted

技术标签:

【中文标题】问题删除会话变量【英文标题】:Issue deleting session variables 【发布时间】:2013-07-14 00:06:56 【问题描述】:

我在删除/取消设置会话变量时遇到问题。

例如,如果我在购物车 1,2,3 中有 3 件商品,我删除了所有这些商品。它们应该从会话中删除,而是隐藏起来。

取消设置两个变量 这是我取消设置 2 个会话变量 cart_arrayminicart

 <?php
      if (isset($_POST['index_to_remove']) && (!empty($_SESSION["cart_array"]["minicart"]))) 
        // Access the array and run code to remove that array index
        $key_to_remove = $_POST['index_to_remove'];
        if (count($_SESSION["cart_array"]["minicart"]) <= 1) 
            unset($_SESSION["cart_array"]["minicart"]);
         else 
            unset($_SESSION["cart_array"]["minicart"]["$key_to_remove"]);
            sort($_SESSION["cart_array"]["minicart"]);
        
    
?>

HTML

   echo '<form action="cart.php" method="post">
            <input name="deleteBtn' . $item_id . '" 
            type="submit" value="Delete" />
            <input name="index_to_remove" 
            type="hidden" value="' . $i . '" />
            </form>';

也在这个 header.php 页面中,我回显了两个会话变量 cart_arrayminicart

我的问题是/问题是

如果您查看 未设置变量,则意味着根据分配给这些会话的 itemid 取消设置会话变量 cary_arrayminicart。 现在,如果我单击删除按钮,则会从购物车中删除该项目,但是 *为什么不从会话中删除会话变量 cary_arrayminicart

我知道它已被删除,因为下面的代码显示会话变量不是被删除(未设置)

if(isset($_SESSION ['cart_array']) && !empty($_SESSION['cart_array'])) 
   echo ("I am still here");
    

【问题讨论】:

你没有unset($_SESSION['cart_array']),只是其中的数组,所以你的测试将echo 'I am still here' 这段代码中是否有 session_start() 取消会话? @PHPglue 你能解释更多吗,也许请举例 @Colandus 你不需要每个php标签的start_session,但我确实在页面顶部有它,如问题所示:) 哦,我没有正确理解你的问题......现在我明白了......是的,他是对的。你只是在取消设置数组值,“minicart”......如果你想删除那个,你必须 unset($_SESSION['cart_array']) ......这就是你想要的吗?从会话中删除整个“cart_array”? 【参考方案1】:

试试这个:

$_SESSION['cart_array'] = Array();//This should empty the cart.

然后只测试空。原因很可能是由于 PHP 的 GC 的工作方式。阅读this answer 以获得更好的解释。

【讨论】:

这会删除会话吗?因为如果不只是从购物车中删除项目,我需要删除购物车中的项目分配给 &lt;?php echo ($_SESSION ['minicart']) ?&gt; 不是显示 在其他中阻止这 2 个变量显示在我需要删除会话变量的 echo 中。 重置阵列后可以运行unset($_SESSION['cart_array']) 负责cart_arrayminicart 呢。我试过$_SESSION['cart_array']["minicart"] = Array(); 但还是没有 你认为是因为我有像$_SESSION ['minicart'] = $minicartTotal = money_format("%n", $cartTotal);这样的迷你车【参考方案2】:

当你这样做时:

unset($_SESSION['cart_array']['minicart']);

您只是取消设置“minicart”,而不是“cart_array”。

如果你想同时取消“cart_array”和“minicart”的设置,你应该这样做:

unset($_SESSION['cart_array']);

$_SESSION['cart_array'] = array();

要测试数组是否为空,只需:

if ($_SESSION['cart_array']):
else:
endif;

【讨论】:

no not $_SESSION['cart_array'] = array(); 然后它和现在做的一样(因为“minicart”是“cart_array”中的唯一值,否则它不会完全一样的效果,虽然它不是正确的解决方案)...为你编辑它 如果取出“minicart”,我会得到 minicart 和 cart_array 的未定义索引,在 &lt;li class="item_amount"&gt;&lt;a&gt; Item &lt;span id="items"&gt;&lt;?php echo count($_SESSION["cart_array"])?&gt;&lt;/span&gt; &lt;/a&gt;&lt;/li&gt; &lt;li class="cart_total"&gt; Total &lt;span id="cart_total"&gt;&lt;?php echo ($_SESSION ['minicart']) ?&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; 中回显 也许您不应该取消设置 cart_array 会话?就让它保持原样吗?为什么你还要清理它?是的,如果你从会话中删除了数组,当然你会得到未定义的索引。 @Colandus 如果您进行在线购物,例如您进入 topman 网站,将商品添加到页面顶部的购物车中,它会告诉您您的购物车中有多少商品 cart_array 然后您所有商品的总价minicart 当您从购物车中删除商品时,它会删除小购物车上的总价格变化等,如果它为空,您将获得 0 的商品和 0.00 的价格。就是这样...... atm 商品与价格一起显示,但是当购物车完全为空时,什么都不应该显示

以上是关于问题删除会话变量的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 会话数组中删除变量

Laravel 不会删除/更新会话

销毁会话,但保留一个变量集

取消设置 php 会话变量

Flask 会话忘记请求之间的条目

会话变量影响 PHP 中其他会话变量的问题