Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何取消设置/销毁除某些特定密钥外的所有会话数据?_Php_Session - Fatal编程技术网

Php 如何取消设置/销毁除某些特定密钥外的所有会话数据?

Php 如何取消设置/销毁除某些特定密钥外的所有会话数据?,php,session,Php,Session,我在一个网站上有一些会话数据。我想在用户单击其他页面时销毁所有会话数据,但某些特定键除外,如$\u session['x']和$\u session['y'] 有没有办法做到这一点?取消特定会话变量的使用 unset($_SESSION['one']); 一次性销毁所有会话变量 session\u destroy() 要释放所有会话变量,请使用 session_unset() 如果要销毁除x和y之外的所有会话变量,可以执行以下操作 $requiredSessionVar = array('x'

我在一个网站上有一些会话数据。我想在用户单击其他页面时销毁所有会话数据,但某些特定键除外,如
$\u session['x']
$\u session['y']


有没有办法做到这一点?

取消特定会话变量的使用

unset($_SESSION['one']);
一次性销毁所有会话变量

session\u destroy()

要释放所有会话变量,请使用

session_unset()

如果要销毁除
x
y
之外的所有会话变量,可以执行以下操作

$requiredSessionVar = array('x','y');
foreach($_SESSION as $key => $value) {
    if(!in_array($key, $requiredSessionVar)) {
        unset($_SESSION[$key]);
    }
}

也许做点像这样的事

foreach($_SESSION as $key => $val)
{

    if ($key !== 'somekey')
    {

      unset($_SESSION[$key]);

    }

}
这有用吗

function unsetExcept($keys) {
  foreach ($_SESSION as $key => $value)
    if (!in_array($key, $keys))
      unset($_SESSION[$key]);
}

由于
$\u SESSION
是一个常规数组,您可以使用以下命令获取结果数组:

$keys = array('x', 'y');
$_SESSION = array_intersect_key($_SESSION, array_flip($keys));

此处用于翻转
$keys
的键/值关联,而
array\u intersect\u key
用于在使用键进行比较时获取两个数组的交点。

因此,当我无法提问时,我将回答:

这个问题很老了,但仍然有人像我一样在审查这个问题。我搜索了,我喜欢其中一个答案,但这里有一个更好的答案:让我们取消设置$array1,除了一些变量$array2

function unsetExcept($array1,$array2) {
    foreach ($array1 as $key => $value)
        if(!in_array($key, $array2)){
            unset($array1[$key]);
        }
    }
}

为什么这样更好?不仅仅是针对$_会话

你是指其他用户的会话?我理解正确吗?您想保留$\u会话['x']和$\u会话['y']?是的,我只想保留x和y。@本杰明:您可以在会话中迭代变量。是的。但我在会话函数中搜索一个特殊函数。谢谢,我会这样做的。还感谢@Kemal Fadillah的原创循环。谢谢@Gumbo,这也很有帮助。但是对于新手来说,最简单的一个是上面提到的。又是Thx。