取消设置 php 会话变量

Posted

技术标签:

【中文标题】取消设置 php 会话变量【英文标题】:Unset php session variable 【发布时间】:2013-02-17 04:06:43 【问题描述】:

我正在通过 ajax 传递一个 ID,以便由 $_SESSION 删除。 ajax 部分工作正常,php 在 POST 中接收 id,但不能取消设置变量。为什么???这是我的代码:

ajax部分:

    $(".delete").live('click', function(e)
    e.preventDefault();
    var id_to_remove = $(this).attr('id');
    //alert(id_to_remove);
    $.ajax(
        type: "POST",
        url: 'inc/functions/remove_item_from_cart.php',
        data:  id : id_to_remove ,
        success: function(data) 
          $("#content").load('inc/functions/get_checkout_content.php');
            alert(data);
        
    )

);

php接收部分:

session_start();
if(isset($_SESSION['cart']) && isset($_POST['id']))
//echo var_dump($_SESSION['cart']);
$ncart=$_SESSION['cart'];
if (count($ncart)>0)
    unset($ncart[$_POST['id']]); // this is NOT working!!!
    $ncart=array_values($ncart);

    $_SESSION['cart']=$ncart;
    if(count($ncart)==0)
        unset($_SESSION['cart']);
        unset($_SESSION['cart_total']);
        echo "all_empty";
     // this if part is the only working!


任何有用的建议为什么我不能取消设置会话变量?谢谢!

【问题讨论】:

这段代码到底有什么不适用的?我们不会猜测出了什么问题...... 您使用的是什么版本的 jQuery? .live() 现已弃用。 抱歉,只是为了确认一下,这个过程是否正确:$ncart=$_SESSION['cart']; to $ncart=array_values($ncart); to $_SESSION['cart']=$ncart;? 我怀疑您必须将 if(count($ncart)==0) 更改为 if(count($_SESSION['cart'])==0) @MichaelRushton 这只是在从中间删除一个后将该数组中的键重新编号为连续的。这是必要的,因为 PHP 的“数组”类型具有不同寻常但功能强大的特性,同时作为列表/向量和(有序)散列。 【参考方案1】:

我有自己的解决方案:

if (count($_SESSION['cart'])>0)

 foreach ($_SESSION['cart'] as $key => $subarray) 
  if ($subarray['id'] == $_POST['id']) 
  unset($_SESSION['cart'][$key]); 
 break; 
  
 

$_SESSION['cart'] = array_values($_SESSION['cart']);

 else 
 if(count($_SESSION['cart'])==0)
  unset($_SESSION['cart']);
  unset($_SESSION['cart_total']);
  echo "all_empty";
   

那是因为数组是这样的:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Collier Ano petit
            [price] => 45
            [quant] => 1
            [ptotal] => 45
        )

)

【讨论】:

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

为啥不会/如何对 PHP 会话变量进行排序而不是取消设置

PHP未设置会话不起作用

会话变量的值正在取消设置,即“-blank-”没有取消设置它

如何在取消设置变量后修复会话未启动

根据数组中的值取消设置特定会话项

如何取消设置 PHP 中作为数组的 _SESSION 变量