可能重复:
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
}
}
请帮帮我
答案 0 :(得分:5)
好吧,我很高兴看到php仍然能够忽视明显的明显。
有许多方法可以通过循环和各种方法来实现这一点,但正确方法是使用子数组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>
参考:
答案 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));