【问题标题】:Can I unset PHP $_SESSION{} variables with a wildcard?我可以使用通配符取消设置 PHP $_SESSION{} 变量吗?
【发布时间】:2011-07-27 14:38:25
【问题描述】:

我可以用通配符取消设置吗?

我有一堆 $_SESSION 变量,它们都以相同的前缀开头。我可以使用通配符而不是显式取消全部设置吗?

(前缀保持不变,但根据某些情况,就足够了,所以我不愿意明确地这样做)

$_SESSION['abc_1']
$_SESSION['abc_2']
$_SESSION['abc_fish']
$_SESSION['abc_xyz']

$会话['abc*']

【问题讨论】:

  • 为什么不将这些变量存储在一个数组中呢? $_SESSION['abc'] = array('fish'=>'foo','xyz'=>'bar'); 你可以通过一个 unset 调用来取消它。

标签: php arrays session wildcard


【解决方案1】:

只需遍历数组并取消设置正确的...

foreach ($_SESSION as $key => $value) {
    if (substr($key, 0, 3) == "abc") {
        unset($_SESSION[$key]);
    }
}

【讨论】:

    【解决方案2】:

    您可以尝试正确保存 像这样:

    $_SESSION['abc']['1']
    $_SESSION['abc']['2']
    $_SESSION['abc']['fish']
    $_SESSION['abc']['xyz'] 
    

    然后

    unset($_SESSION['abc'])
    

    【讨论】:

      【解决方案3】:

      我认为您不能使用通配符,但最简单的解决方案是遍历 Session 数组并使用正则表达式检查键。如果匹配,请取消设置:)

      【讨论】:

        【解决方案4】:

        你可以用类似...的东西来做到这一点

            foreach ($_SESSION as $key=>$val) if (strpos($key,'abc_') !== false) unset($_SESSION[$key]);
        

        (我会使用 strpos 而不是 substr,因为它更快)

        【讨论】:

          【解决方案5】:
          foreach ($_SESSION as $k=>$v) {
              if (substr($k, 0, strlen('abc')) == 'abc')
                  unset($_SESSION[$k]);
          }
          

          【讨论】:

            猜你喜欢
            • 2017-09-12
            • 1970-01-01
            • 2012-08-30
            • 1970-01-01
            • 2012-01-26
            • 2011-11-19
            • 2012-11-19
            • 1970-01-01
            相关资源
            最近更新 更多