У меня есть некоторые данные сеанса на веб-сайте. Я хочу уничтожить все данные сеанса, когда пользователь нажимает другую страницу, за исключением некоторых определенных ключей, таких как $_SESSION['x']
и $_SESSION['y']
.
Есть ли способ сделать это?
Может быть, что-то вроде этого
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