Как отключить / уничтожить все данные сеанса, кроме некоторых определенных ключей?

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

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

Solutions Collecting From Web of "Как отключить / уничтожить все данные сеанса, кроме некоторых определенных ключей?"

Может быть, что-то вроде этого

 foreach($_SESSION as $key => $val) { if ($key !== 'somekey') { unset($_SESSION[$key]); } } с foreach($_SESSION as $key => $val) { if ($key !== 'somekey') { unset($_SESSION[$key]); } } 

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

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

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

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

 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]); } } с $requiredSessionVar = array('x','y'); foreach($_SESSION as $key => $value) { if(!in_array($key, $requiredSessionVar)) { unset($_SESSION[$key]); } } 

Это поможет?

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

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

Этот вопрос старый, но все же кто-то просматривает это, как я, я искал, и мне понравился один из ответов, но вот лучший: Позволяет unset $ array1, за исключением некоторых переменных, как $ array2

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

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