Сброс сеанса по ссылке не работает - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь сбросить сеансы с помощью функции, так что это проще. Я вызываю функцию так: unsetSession("index1/index2/index3/...)

Это работает, когда я указываю полный путь к последнему элементу. Однако он не работает, когда я хочу удалить элемент, который содержит дополнительные элементы.

Пример:

$_SESSION:

["test"]=>
array(1) {
  ["value1"]=>
  array(1) {
    ["value2"]=>
    string(6) "String"
  }
} 

Это: unsetSession("test/value1/value2") будет работать и удалять value2. Это: unsetSession("test/value1") не будет работать. Это моя проблема.

Код:

PUBLIC function unsetSession($s) {

        if (!strstr($s, "/")) {

            unset($_SESSION[$s]);

        } 
        else {

            $temp = &$_SESSION;

            $path = explode('/', $s);

            if (!isset($temp[current($path)]) OR is_string($temp[current($path)])) return false;
            $temp = &$temp[current($path)];

            while ($next = next($path)) {

                if ((isset($temp[$next]) OR $temp[$next] == null) AND !is_array($temp[$next])) {

                    unset($temp[$next]);
                    return true;

                }

                $temp = &$temp[$next];

            }

            unset($temp); // <- DOES NOT UNSET SESSION, why?
            return true;

        }

        return false;

    }

Есть идеи, почему это не работает?

1 Ответ

0 голосов
/ 12 апреля 2019

Я бы заменил использование current () и next () для функции end (), которая предоставляет последний элемент массива:

   function unsetSession($s) {
    if (!strstr($s, "/")) {
        unset($_SESSION[$s]);
    } else {
        $path = explode('/', $s)
        unset(end($path));
    }
    return false;
    }
...