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

2022-08-30 10:05:16

我有用于向会话添加变量的PHP代码:

<?php
    session_start();
    if(isset($_GET['name']))
    {
        $name = isset($_SESSION['name']) ? $_SESSION['name'] : array();
        $name[] = $_GET['name'];
        $_SESSION['name'] = $name;
    }
    if (isset($_POST['remove']))
    {
        unset($_SESSION['name']);
    }
?>
<pre>  <?php print_r($_SESSION); ?>  </pre>

<form name="input" action="index.php?name=<?php echo $list ?>" method="post">
  <input type="submit" name ="add"value="Add" />
</form>

<form name="input" action="index.php?name=<?php echo $list2 ?>" method="post">
  <input type="submit" name="remove" value="Remove" />
</form>

我想在用户选择“删除”时从会话数组中删除 中显示的变量。$list2

但是当我取消设置时,数组中的所有变量都将被删除。

如何只删除一个变量?


答案 1
if (isset($_POST['remove'])) {
    $key=array_search($_GET['name'],$_SESSION['name']);
    if($key!==false)
    unset($_SESSION['name'][$key]);
    $_SESSION["name"] = array_values($_SESSION["name"]);
} 

由于 是数组,因此您需要找到指向您感兴趣的名称值的数组键。最后一行重新排列数组的索引以供下次使用。$_SESSION['name']


答案 2

要从会话中删除特定变量,请使用:

session_unregister('variableName');

(查看文档)或

unset($_SESSION['variableName']);

注意:自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已被删除。session_unregister()