如何取消/销毁除某些特定键以外的所有会话数据?

时间:2011-08-27 11:54:45

标签: php session

我在网站上有一些会话数据。我希望在用户点击其他页面时销毁所有会话数据,但$_SESSION['x']$_SESSION['y']等特定键除外。

有办法做到这一点吗?

5 个答案:

答案 0 :(得分:18)

也许做这样的事情

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

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

      unset($_SESSION[$key]);

    }

}

答案 1 :(得分:5)

取消设置特定会话变量的使用。

unset($_SESSION['one']);

在一次使用时销毁所有会话变量。

session_destroy()

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

session_unset();

如果你想销毁除xy之外的所有Session变量,你可以做这样的事情。

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

答案 2 :(得分:4)

由于$_SESSION是常规数组,您可以使用array_intersect_key来获取结果数组:

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

此处array_flip用于翻转$keysarray_intersect_key的键/值关联,用于在使用键进行比较时获取两个数组的交集。

答案 3 :(得分:2)

这会有帮助吗?

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

答案 4 :(得分:-2)

所以当我不能问我会回答:

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

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

为什么这样更好?这不仅仅是$ _SESSION