Как сбросить / уничтожить все данные сеанса, кроме определенных ключей - PullRequest
4 голосов
/ 27 августа 2011

У меня есть данные сеанса на веб-сайте.Я хочу уничтожить все данные сеанса, когда пользователь нажимает на другую страницу, за исключением некоторых конкретных ключей, таких как $_SESSION['x'] и $_SESSION['y'].

. Есть ли способ сделать это?

Ответы [ 5 ]

18 голосов
/ 27 августа 2011

Может быть сделать что-то подобное

foreach($_SESSION as $key => $val)
{

    if ($key !== 'somekey')
    {

      unset($_SESSION[$key]);

    }

}
5 голосов
/ 27 августа 2011

для сброса определенной переменной сеанса используйте.

unset($_SESSION['one']);

для уничтожения всех переменных сеанса за одно использование.

session_destroy()

Для освобождения всех переменных сеанса используйте.

session_unset();

если вы хотите уничтожить все переменные Session, кроме x и y, вы можете сделать что-то вроде этого.

$requiredSessionVar = array('x','y');
foreach($_SESSION as $key => $value) {
    if(!in_array($key, $requiredSessionVar)) {
        unset($_SESSION[$key]);
    }
}
4 голосов
/ 27 августа 2011

Поскольку $_SESSION является обычным массивом, вы можете использовать array_intersect_key, чтобы получить результирующий массив:

$keys = array('x', 'y');
$_SESSION = array_intersect_key($_SESSION, array_flip($keys));

Здесь array_flip используется для переключения ассоциации ключ / значение $keys, а array_intersect_key используется для получения пересечения обоих массивов при использовании ключей для сравнения.

2 голосов
/ 27 августа 2011

Поможет ли это?

function unsetExcept($keys) {
  foreach ($_SESSION as $key => $value)
    if (!in_array($key, $keys))
      unset($_SESSION[$key]);
}
0 голосов
/ 24 апреля 2014

Поэтому, когда я не могу спросить, я отвечу:

Этот вопрос старый, но все-таки кто-то рассматривает его, как я. Я искал, и мне понравился один из ответов, но вот лучший: Позволяет сбросить $ array1, за исключением некоторых переменных, таких как $ array2

function unsetExcept($array1,$array2) {
    foreach ($array1 as $key => $value)
        if(!in_array($key, $array2)){
            unset($array1[$key]);
        }
    }
}

Почему это лучше? ЭТО НЕ ТОЛЬКО ДЛЯ $ _SESSION

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...