如何使用特定前缀取消设置会话变量

时间:2012-12-31 10:49:26

标签: php session-variables

  

可能重复:
  How to unset/destroy all session data except some specific keys?

我有一些以“cars”开头的会话变量 比如

$_SESSION["cars_registration"];
$_SESSION["cars_make"];
$_SESSION["cars_model"];
$_SESSION["cars_variant"];
.
.
.
$_SESSION["cars_date_created"];

我想知道取消设置/删除/清空那些以汽车作为前缀的会话变量的代码。

到目前为止,我已经实现了这一点,但对于解开它们的代码并不知道。

foreach($_SESSION as $key => $value)
{
    if (strpos($key, 'cars_') === 0)
    {
      // Need to delete / unset the session variables  
    }
}

请帮帮我

5 个答案:

答案 0 :(得分:5)

好吧,我很高兴看到仍然能够忽视明显的明显。

有许多方法可以通过循环和各种方法来实现这一点,但正确方法是使用子数组cars,你可以容易一气呵成。

所以不要创建

$_SESSION["cars_registration"];
$_SESSION["cars_make"];

等,你会创建:

$_SESSION["cars"]["registration"];
$_SESSION["cars"]["make"];

所以当你来取消它时,你只需要这样做:

unset($_SESSION["cars"]);

$_SESSION可以将数据保存在多维结构中,就像任何其他数组一样 - 它不需要是一个扁平的值集合。

答案 1 :(得分:4)

你几乎得到了它!

 foreach($_SESSION as $key => $value)
    {
        if (strpos($key, 'cars_') === 0)
        {
          unset($_SESSION[$key]); //add this line
        }
    }

这里有一些解释。在foreach内设置$key是一个变量,用于保存每次迭代的key数组的$_SESSION,它与$value <的工作方式相同/ p>

参考:

http://php.net/manual/en/control-structures.foreach.php

答案 2 :(得分:3)

只需使用unset

foreach($_SESSION as $key => $value)
{
    if (strpos($key, 'cars_') === 0)
    {
      unset($_SESSION[$key]);
    }
}

答案 3 :(得分:0)

session_unregister - 从当前会话中取消注册全局变量 自PHP 5.3.0起,此函数已被弃用。非常不鼓励依赖此功能。

session_unset - 释放所有会话变量 不要使用unset($ _ SESSION)取消整个$ _SESSION,因为这将禁用通过$ _SESSION超全局注册会话变量。

session_destroy - 销毁注册到会话的所有数据

答案 4 :(得分:0)

使用PHP,您可以使用unset来“销毁”变量。因此,一旦您确信密钥符合您的标准,您就可以:

unset($_SESSION($key));