Сбросьте все переменные $ _POST, чтобы при перенаправлении я не получал окно с предупреждением - PullRequest
6 голосов
/ 22 марта 2012

После отправки формы у меня есть 2 переменные $ _POST.На целевой странице я хочу превратить их в переменные $ _SESSION и сбросить переменные $ _POST, чтобы пользователь не получал предупреждение браузера о повторной отправке своих данных.Это мой (не работающий) код:

 if(isset($_POST['clave']) && isset($_POST['email'])){
   $_SESSION['id_user']=$_POST['clave'];  
   $_SESSION['email']=$_POST['email'];  
 }
 if(isset($_SESSION['id_user']) && isset($_SESSION['email'])){
   unset($_POST['clave']); 
   unset($_POST['email']);
   //I do my stuff here
 }

Если я повторяю сообщения, ничего не отображается, но каждый раз при перезагрузке я снова получаю предупреждение браузера.

Ответы [ 4 ]

8 голосов
/ 22 марта 2012

Вы не можете просто удалить данные $ _POST с сервера. Браузер предупреждает об этом, потому что он сохраняется браузером . Если он повторно отправляет данные, он отправляет их обратно на сервер и повторно заполняет $_POST.

Вам необходимо использовать шаблон POST-REDIRECT-GET .

Обработка данных POST (например, путем выгрузки их в сеанс), затем отправка браузеру перенаправления , а не документа HTML. Затем браузер отправляет GET-запрос на сервер, а затем вы даете им страницу.

4 голосов
/ 22 марта 2012

Это невозможно.Когда пользователь нажимает перезагрузить, действие PREVIOUS переделано, что было сообщение.Даже если вы сбросили значения POST, когда форма была впервые отправлена, действие перезагрузки будет совершенно НОВЫМ запросом.Браузер ВСЕГДА спрашивает пользователя, хотят ли они повторно отправить данные.

Чтобы предотвратить это, вы должны перенаправить пользователя на другую страницу ПОСЛЕ формирования сообщения.

например

  1. пользователь ПОЛУЧИТ форму.
  2. пользователь ПОСТАНОВИТ форму
  3. сервер НАПРАВЛЯЕТ пользователя на новую страницу
  4. пользователь ПОЛУЧАЕТ новую страницу
  5. пользователь нажимает перезагрузить
  6. пользователь ПОЛУЧАЕТ новую страницу снова - POST не выполняется.
2 голосов
/ 22 марта 2012

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

В большинстве случаев вам следует использовать Шаблон POST / Redirect / GET , который не страдает от этой проблемы.

1 голос
/ 08 января 2013

это старый пост, но я тоже столкнулся с той же проблемой, поэтому здесь простое решение,

  1. создайте login.php ==>, который публикует две переменные через html форму

  2. создайте getHome.php ==>, который получит две переменные $ _POST ['myvar']; Функцию и поместите эти две опубликованные переменные в сеанс, также, если хотите, выведите неверный пользователь n pass здесь.

  3. создайте home.php ==> здесь вы поместите условие if для проверки сеанса, т.е. if (isset ($ _ SESSION ['myvar'])) {display home} else {header ('location: login) .php '); * Функция заголовка перенаправит вас на login.php, если вы подключитесь к файлу home.php напрямую без входа в систему.

готово !!

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