如何销毁PHP中的特定会话变量?

如何销毁PHP中的特定会话变量?,php,session,Php,Session,我目前正在开发一个购物车系统。它需要用户登录才能访问购物车。因此,我编写了一些代码,在用户未登录时禁用对购物车页面的访问。但是,每当我尝试清空购物车时,我都会注销。我只想销毁购物车会话,而不是用户会话。这是我的密码: 对于购物车页面: <?php session_start(); if(isset($_SESSION['userID'])){ } elseif(!isset($_SESSION['userID'])){ echo "<scr

我目前正在开发一个购物车系统。它需要用户登录才能访问购物车。因此,我编写了一些代码,在用户未登录时禁用对购物车页面的访问。但是,每当我尝试清空购物车时,我都会注销。我只想销毁购物车会话,而不是用户会话。这是我的密码:

对于购物车页面:

<?php
  session_start();
  if(isset($_SESSION['userID'])){

  }
  elseif(!isset($_SESSION['userID'])){
      echo 
      "<script>
        alert('You must be logged in.');
        window.location.href='index.php#login'
      </script>";
    }
?>

  <?php
    include ('../import/layout.php');
  ?>

  <body>

    <div class="site-wrapper" id="index">

      <div class="site-wrapper-inner">

        <div class="cover-container">

          <?php
            include ('../import/nav-two.php');
          ?>

          <!-- <div class="inner cover">

          </div>

          <div class="mastfoot">
            <div class="inner">
              <p>&copy; 2015 Aroma Chicken House Restaurant, All Rights Reserved.
                 <a class="menu-item pull-right" href="#index">Back to Top</a>
              </p>
            </div>
          </div> -->

        </div>

        <div id="cart">
          <div class="container">
            <?php
              include ('../cart/index.php');
            ?>
          </div>
        </div>


      </div>

    </div>


  </body>
那怎么办

unset($_SESSION["products"])
而不是

session_destroy()
每个用户只有一个会话。因此,没有办法破坏“特定”会话。您可以做的是删除负责显示购物车的会话内容(如上所示)

对站点1或站点2特定的所有会话变量使用
unset()

unset($_SESSION['var1']);
//or
unset($_SESSION['var2']);
你可以用

  unset($_SESSION["products"]);
使用


session\u destroy()
将销毁所有会话,而上面的一行将销毁特定的会话变量。

您希望的是不要销毁会话,因为您希望用户保持登录状态。最好的方法是根据需要删除或覆盖购物车的变量。您可以
unset($_SESSION['products')
完全删除变量,或
$\u SESSION['products']=array()将其重置为空购物车

在某些情况下(如果以后将购物车保存在数据库中),您可能希望使用与从购物车中删除购物车中所有项目时相同的代码…

unset()
func在这种情况下很有用


session\u destroy()
func将销毁

session\u destroy()
是销毁所有会话变量和
unset(会话变量)
销毁特定会话变量

可以将特定会话的值设置为“null”,然后在需要时使用empty()函数检查该会话的值,或者可以将特定会话的值设置为某个值(例如0),然后使用设置值检查会话的值以执行某些操作。

使用unset()而不是session_destroy()。在未设置特定变量的地方,是session\u destroy销毁所有session变量

unset($_SESSION["products"])

基本上,这里每个人的答案都是相同的,但确实
unset()
函数是传递此场景的唯一方法。但是让我告诉您,
unset()
函数不会破坏会话,但它会破坏
$\u会话['key']
变量。注意,我提到的是变量,而不是会话

因此基本上unset()函数用于取消变量设置。

例如,请尝试以下代码

   $greet = 'Hello World!';
   unset($greet);
   echo $greet;// output will be blank
因此,以类似的方式,如果要删除超全局变量($\会话是超全局变量),则必须使用键传递,否则会破坏所有会话。是的,您也可以通过
unset()
函数销毁会话

$_SESSION['greet'] = "hello";
$_SESSION['greet2'] = "hello2";

unset($_SESSION['greet']); //only remove $_SESSION variable with key 'greet'

unset($_SESSION); //will destroy the all keys of $_SESSION variable

尽管您可以使用
sesion\u destroy()
销毁所有密钥。

尝试session\u destroy()@Clouds,OP只想销毁cart变量,而不是整个sessionMan。谢谢真不敢相信事情竟那么简单。我想弄清楚这件事已经有一段时间了。谢谢你为我节省了一些时间。比所有其他答案都要详细——这正是我所需要的。谢谢
   $greet = 'Hello World!';
   unset($greet);
   echo $greet;// output will be blank
$_SESSION['greet'] = "hello";
$_SESSION['greet2'] = "hello2";

unset($_SESSION['greet']); //only remove $_SESSION variable with key 'greet'

unset($_SESSION); //will destroy the all keys of $_SESSION variable