0

可能重复:
如何取消设置/销毁除某些特定键之外的所有会话数据?

我有某些以“汽车”开头的会话变量,例如

$_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  
    }
}

请帮帮我

4

5 回答 5

6

好吧,我很高兴看到仍然能够忽略显而易见的问题。

有很多方法可以用循环和各种各样的东西来做到这一点,但是正确的方法是使用一个子数组cars,你可以轻松地一次性销毁它。

所以而不是创造

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

等,您将创建:

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

因此,当您取消设置时,您只需执行以下操作:

unset($_SESSION["cars"]);

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

于 2012-12-31T10:57:12.220 回答
4

你几乎明白了!

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

这里有一些解释。在里面foreach你设置$key为一个变量来保存每次迭代key$_SESSION数组,它与$value

参考:

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

于 2012-12-31T10:51:42.973 回答
3

只需使用unset.

foreach($_SESSION as $key => $value)
{
    if (strpos($key, 'cars_') === 0)
    {
      unset($_SESSION[$key]);
    }
}
于 2012-12-31T10:51:13.427 回答
0

session_unregister — 从当前会话中取消注册全局变量 自 PHP 5.3.0 起,该函数已被弃用。强烈建议不要依赖此功能。

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

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

于 2012-12-31T10:52:52.573 回答
0

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

unset($_SESSION($key));
于 2012-12-31T10:53:08.617 回答