如何在 PHP 中取消设置会话数组

Posted

技术标签:

【中文标题】如何在 PHP 中取消设置会话数组【英文标题】:how to unset a session array in PHP 【发布时间】:2014-02-20 12:50:24 【问题描述】:

我使用

创建了一个会话数组
$_SESSION['create'] = array();

然后用这个填充数组,

$_SESSION['create']['new-campaign-name']    = $_POST['new-campaign-name'];
$_SESSION['create']['new-campaign-type']    = $_POST['new-campaign-type'];
$_SESSION['create']['new-campaign-country'] = $_POST['new-campaign-country'];
$_SESSION['create']['new-campaign-list']    = $_POST['new-campaign-contact'];
$_SESSION['create']['new-campaign-des']     = $_POST['new-campaign-des'];

但我想删除会话数组的所有内容。

我试过了

unset($_SESSION['create']);

但它似乎不起作用,并且所有值仍在会话数据上,有没有办法重置我的会话数组的内容?

【问题讨论】:

为什么不再$_SESSION['create'] = array(); unset($_SESSION['create']) 可以取消设置该特定键,如果它对您不起作用,则可能是某些代码再次添加它。 $_SESSION=array() 将重置整个会话。 它不会重置会话 【参考方案1】:

您需要使用以下内置函数来执行此操作

session_unset();

session_unset on php.net

【讨论】:

我不想只取消设置特定会话数组的其他会话 您能否给我们一段更大的代码来处理并说明您正在使用哪个版本的 PHP? 只是一个预感,但在取消设置数组键(应该可以工作)之前,请确认您没有关闭会话以进行写入( session_write_close() )。这样做会取消设置当前执行的变量,但会导致所有未设置的会话变量返回下一个 session_start()【参考方案2】:

以下是我使用您现有的会话变量运行的一些测试,包括我自己的一些。

在整个脚本中咨询 cmets。

<?php
session_start();
$_SESSION['create'] = array();

// this one can be used also
// $_SESSION=array();

/*
$_SESSION['create']['new-campaign-name']    = $_POST['new-campaign-name'];
$_SESSION['create']['new-campaign-type']    = $_POST['new-campaign-type'];
$_SESSION['create']['new-campaign-country'] = $_POST['new-campaign-country'];
$_SESSION['create']['new-campaign-list']    = $_POST['new-campaign-contact'];
$_SESSION['create']['new-campaign-des']     = $_POST['new-campaign-des'];

$_SESSION['create_2']['new-campaign-des_2']     = $_POST['new-campaign-des_2'];

*/

// my own test without POST variables
$_SESSION['create']['new-campaign-name']    = 'new-campaign-name';
$_SESSION['create']['new-campaign-type']    = 'new-campaign-type';
$_SESSION['create']['new-campaign-country'] = 'new-campaign-country';
$_SESSION['create']['new-campaign-list']    = 'new-campaign-contact';
$_SESSION['create']['new-campaign-des']     = 'new-campaign-des';

$_SESSION['create_2']['new-campaign-des_2']     = 'new-campaign-des_2';

// echo "Session variables above this";

echo $_SESSION['create']; // this will echo Array

echo "<br>";

// this will unset all in $_SESSION['create'] group
unset($_SESSION['create']);

echo "<br>";

var_dump($_SESSION);

echo "<hr>";

// this will echo NULL
var_dump($_SESSION['create']);

echo "<hr>";

// this will echo Array even after unsetting $_SESSION['create']
echo $_SESSION['create_2'];

echo "<hr>";

// this will echo/dump
// array(1)  ["new-campaign-des_2"]=> string(18) "new-campaign-des_2"  
var_dump($_SESSION['create_2']);

echo "<hr>";

// this will echo/dump
// array(1)  ["create_2"]=> array(1)  ["new-campaign-des_2"]=> string(18) "new-campaign-des_2"  
// but not anything in the ['create'] group
var_dump($_SESSION);

【讨论】:

【参考方案3】:

基本上,您想再次将会话的create 部分设置为空。您可以通过再次使用 $_SESSION['create'] = array(); 来执行此操作,就像初始化它一样。

【讨论】:

能否请你投票支持 Fred -ii- 回答他的努力 谢谢你们。一切都以解决方案的名义。

以上是关于如何在 PHP 中取消设置会话数组的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在注销时取消设置特定的 php 会话

如何取消设置 laravel 会话数组

如何在php中取消设置空数组?

在从 php 会话注销期间取消设置 cookie 有啥意义?

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