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。