PHP сбрасывает все переменные с 'tmp' в начале - PullRequest
0 голосов
/ 27 сентября 2011

Я просто пытаюсь просмотреть все текущие переменные сеанса, и если имя переменной сеанса начинается с 'tmp', то я хочу сбросить переменную.

Я бы сделал это следующим образом:

foreach($session as $sv){
    if(substr($sv,0,3)=='tmp'){
        unset($sv);
    }
}

Просто не знаете, как получить все переменные текущего сеанса в массив для начала.

Заранее спасибо!

Ответы [ 6 ]

1 голос
/ 27 сентября 2011

Сессия сама по себе является большим массивом, массивами массивов и т. Д., Поэтому вам нужно создать некоторую рекурсивную функцию, которая будет выполнять поиск по всем уровням ($ _SESSION ["a"] может быть массивом, в котором есть несколько временных переменных, например $ _SESSION ["a"] ["tmp_b"] ..)

Итак:

function resetTemps($arr)
{
    foreach( $arr as $key => $value )
    {
        if( is_array( $value ) )
        {
            resetTemps($value);
        }
        else
        {
            if( substr($key,0,3)=='tmp' )
            {
                unset( $arr[$key] );
            }
        }
    }
}

А затем назовите это как

resetTemps($_SESSION);
1 голос
/ 27 сентября 2011

Если вы на самом деле пытаетесь установить неустановленные переменные для сеанса ), вы должны выполнить цикл $_SESSION.

Если под session variables вы подразумеваете «все переменные, объявленные в области действия текущего сценария», вы должны выполнить цикл $GLOBALS для всех переменных в глобальной области видимости или результат get_defined_vars() для всех переменных в текущей области, например область действия текущей функции.

Код, который вы должны сделать в цикле и сбросить переменные, верен.

1 голос
/ 27 сентября 2011

Решение с подходящим примером

<?php session_start();
$_SESSION['var1']='var 1 value';
$_SESSION['var2']='var 2 value';
$_SESSION['var3']='var 3 value';

$_SESSION['tmpvar1']='tmp var 1 value';
$_SESSION['tmpvar2']='tmp var 2 value';
$_SESSION['tmpvar3']='tmp var 3 value';

print_r($_SESSION);

foreach($_SESSION as $key=>$value)
{
    if(substr($key,0,3)=='tmp'){
        unset($_SESSION[$key]);
    }
}
print_r($_SESSION);
?>
1 голос
/ 27 сентября 2011

В чем проблема с

foreach (array_keys($_SESSION) as $key) {
    if (substr($key,0,3) == 'tmp') {
        unset($_SESSION[$key]);
    }
}

1 голос
/ 27 сентября 2011

Просто используйте $_SESSION

1 голос
/ 27 сентября 2011

$_SESSION содержит каждую переменную сеанса

foreach(array_keys($_SESSION) as $sv){
    if(substr($sv, 0, 3) === 'tmp'){
        unset($_SESSION[$sv]);
    }
}

правильно

...