PHP слить $ _POST в $ _SESSION - PullRequest
       12

PHP слить $ _POST в $ _SESSION

1 голос
/ 20 декабря 2011

Есть ли способ взять массив данных $ _POST и объединить его с массивом $ _SESSION. Я хочу, чтобы текущие данные оставались нетронутыми и только вставляли новые данные или обновляли фрагменты, которые были изменены. Я пробовал array_merge, но он не сделал то, что искал.

Спасибо

Ответы [ 4 ]

1 голос
/ 20 декабря 2011

Не стоит пытаться объединить $_POST в $_SESSION. Вместо этого сделайте что-то вроде:

$_SESSION['lastPost']=$_POST;

Или, если вы хотите обновить изменения, сравните $_POST с $_SESSION['lastPost'] и назначьте любые различия для затронутых клавиш, таких как

$_SESSION['lastPost']['thisKeysValueChanged'] = $_POST['thisKeysValueChanged'];
1 голос
/ 20 декабря 2011
foreach ($_POST as $key => $val) {
    if (!isset($_SESSION[$key]) || ($val !== $_SESSION[$key])) {
        $_SESSION[$key] = $val;
    }
}
Короче говоря,

, если рассматриваемое в данный момент значение ключа POST не имеет соответствующей записи в массиве SESSION или эти два значения отличаются, скопируйте данные POST в SESSION.

Однако имейте в виду, что это позволит злонамеренным пользователям перезаписывать весь массив сеансов. Если они знают, что вы сохраняете флаг $_SESSION['is_admin'], они могут просто перезаписать его соответствующим значением и дать себе полномочия суперпользователя.

Непосредственная + слепая передача предоставленных пользователем данных в переменную сеанса НИКОГДА не является хорошей идеей.

1 голос
/ 20 декабря 2011

Не могли бы вы попытаться создать переменную $ _SESSION ['postVars'] и затем сохранить там информацию о $ _POST.Я не буду пытаться объединить $ _SESSION с $ _POST, что будет иметь последствия для безопасности вашего приложения в дальнейшем.Сказав, что я также буду осторожен, просто сохраняя все, что происходит в глобальном $ _POST.В любом случае, я надеюсь, что мое предложение поможет.

0 голосов
/ 18 ноября 2014

array_merge работает, но не изменяет массив, он возвращает объединенный массив. Что вы хотите сделать, это:

$_SESSION = array_merge($_SESSION, $_POST);

(предупреждения безопасности, как указано выше:)

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