【问题标题】:How to unset/destroy all session data except some specific keys?如何取消设置/销毁除某些特定键之外的所有会话数据?
【发布时间】:2011-08-27 11:54:44
【问题描述】:

我在网站上有一些会话数据。当用户单击另一个页面时,我想销毁所有会话数据,除了一些特定的键,如 $_SESSION['x']$_SESSION['y']

有没有办法做到这一点?

【问题讨论】:

  • 你是指其他用户的会话?
  • 我理解正确吗?你想保留 $_SESSION['x'] 和 $_SESSION['y']?
  • 是的,我只想保留 x 和 y。

标签: php session


【解决方案1】:

也许做这样的事情

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

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

      unset($_SESSION[$key]);

    }

}

【讨论】:

    【解决方案2】:

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

    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]);
        }
    }
    

    【讨论】:

    • @Benjamin:您可以在会话中迭代变量。
    【解决方案3】:

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

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

    这里array_flip用于翻转$keys的键/值关联,array_intersect_key用于获取两个数组的交集,同时使用键进行比较。

    【讨论】:

    • 谢谢@Gumbo,这也有帮助。但是对于新手来说,最简单的方法是上面的。再次感谢。
    【解决方案4】:

    这会有帮助吗?

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

    【讨论】:

    • 是的。但我在 Session Functions 中搜索一个特殊的函数。谢谢,我会这样做。还要感谢@Kemal Fadillah 的原始循环。
    【解决方案5】:

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

    这个问题很老了,但仍然有人像我一样在审查这个问题

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

    为什么这样更好?它不仅适用于 $_SESSION

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 2015-03-21
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2021-08-14
      • 2011-09-21
      相关资源
      最近更新 更多