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

Liv*_*eEn 50 php arrays session

我有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>
Run Code Online (Sandbox Code Playgroud)

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

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

我怎么能删除一个变量?

dna*_*irl 58

if (isset($_POST['remove'])) {
    $key=array_search($_GET['name'],$_SESSION['name']);
    if($key!==false)
    unset($_SESSION['name'][$key]);
    $_SESSION["name"] = array_values($_SESSION["name"]);
} 
Run Code Online (Sandbox Code Playgroud)

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


And*_*eas 45

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

session_unregister('variableName');
Run Code Online (Sandbox Code Playgroud)

(见文件)或

unset($_SESSION['variableName']);
Run Code Online (Sandbox Code Playgroud)

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

  • session_unregister()"自PHP 5.3.0开始,此函数已被弃用,自PHP 5.4.0起已被删除." (3认同)

Mar*_*c B 6

$ _SESSION ['name']变量是一个数组吗?如果要从数组中删除特定键,则必须在unset()调用中引用该确切键,否则将删除整个数组,例如

$name = array(0 => 'a', 1 => 'b', 2 => 'c');
unset($name); // deletes the entire array
unset($name[1]); // deletes only the 'b' entry
Run Code Online (Sandbox Code Playgroud)

您的代码段的另一个小问题:您将GET查询参数与POST表单混合在一起.你有什么理由不能在隐藏字段中传递'name'的表单吗?最好不要混合使用get和post变量,尤其是在其他地方使用$ _REQUEST时.你可以尝试找出为什么$ _GET ['name']与$ _POST ['name']没有相同的各种乐趣,因为服务器在'variables_order'中设置了不同的EGPCS顺序.ini设置.

<form blah blah blah method="post">
  <input type="hidden" name="name" value="<?= htmlspecialchars($list1) ?>" />
  <input type="submit" name="add" value="Add />
</form>
Run Code Online (Sandbox Code Playgroud)

并注意htmlspecialchars()调用.如果$ list1或$ list2包含双引号("),它将破坏您的HTML