取消设置具有相似名称的所有会话变量

时间:2016-01-29 11:04:05

标签: php session session-variables unset

我正在使用一些$_SESSION变量来过滤许多名称相似的查询记录(例如$_SESSION['nameFilter']$_SESSION['cityFilter']等)。

我正在使用链接重置这些过滤器,但我想知道是否有办法取消设置名称类似的所有$_SESSION变量:

$_SESSION[(somewords)Filter]

4 个答案:

答案 0 :(得分:1)

使用foreach枚举$_SESSION[] session_start(); foreach (array_keys($_SESSION) as $key) { if (substr($key, -6) == 'Filter') { unset($_SESSION[$key]); } } ,使用the keys获取每个密钥的最后6个字符,使用substr()(还有什么? )取消它。

一样简单:

function MergeRecursive(obj1, obj2) {
    var k = Object.keys(obj1), i = 0;
    for (var p in obj2) {
        if(typeof obj1[p] == 'object' && typeof obj2[p] == 'object')
            obj2[p] = MergeRecursive(obj1[p],obj2[p]);
        else if(obj1[p] != null)
            obj2[p] += obj1[p];
        else
            obj2[k[i]] = obj1[k[i]];
        i++;
    }
    return obj2;
}

答案 1 :(得分:0)

步骤:

1.) Get all session variable using $_SESSION.
2.) Check in every session key if it contain "Filter" string 
then unset it using unset($_SESSION[(someword)Filter]);

试试这个:

foreach($_SESSION as $key => $value){
  if (strstr($key, 'Filter') == 'Filter') {
    unset($_SESSION[$key]);
  }
}

答案 2 :(得分:0)

假设您的密钥总是包含字符串Filter,您可以检查它。

我建议你看一下strpos函数,它检查一个给定的针是否在一个字符串中被拼接,如果没有找到它就返回null或者针开始的位置在那个字符串中。

然后你只需要浏览会话变量并取消设置包含单词Filter

的变量
foreach($_SESSION as $key => $value){
  if (strpos($key, 'Filter') !== false) {
    unset($_SESSION[$key]);
  }
}

希望这会有所帮助:)

答案 3 :(得分:0)

您需要检查每个存在的会话并检查其名称。请查看以下示例代码。

<?php
session_start();

//Example records...
$_SESSION['onefilter'] = 'one';
$_SESSION['twofilter'] = 'two';
$_SESSION['threefilter'] = 'three';
$_SESSION['fourtilter'] = 'four';

//Loop untill exist session...
foreach($_SESSION AS $sessKey => $sessValue){
    //Check for session name exist with 'filter' text...
    if (strpos($sessKey, 'filter') !== false) {
        unset($_SESSION[$sessKey]);//Unset session
    }
}

echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
/*Output...

Array
(
    [fourtilter] => four
)
*/
?>

愿这对你有所帮助。