Реализация PHP и MySQL без предупреждений об обновлении - PullRequest
0 голосов
/ 26 августа 2011

Я немного новичок в PHP и MySQL и только что настроил базовую систему входа в систему и регистрации (мне потребовалось целое время, чтобы получать сообщения об ошибках!).

Я заметил большое раздражение от моего кода. Когда пользователь входит в систему, я запускаю

$_SESSION['username'] = $username;

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

Чуть дальше в коде, у меня есть что-то вроде этого:

if ($_SESSION['username'])
{
    //show that user has logged in
}

При обновлении страницы я получаю всплывающее окно, сообщающее, что "Firefox должен отправить информацию, которая будет повторять любое действие, которое было выполнено ранее. "

Я почти уверен, что это вызвано доступом к базе данных, хотя это не должно происходить при моей настройке: я подключаюсь к базе данных только после того, как пользователь нажал кнопку «Войти». Эта кнопка скрыта, когда пользователь вошел в систему. Почему тогда появляется это сообщение? Могу ли я предотвратить это, не делая кардинальных структурных изменений или даже не используя другой язык?

Ответы [ 4 ]

1 голос
/ 26 августа 2011

Это не имеет ничего общего с вашим языком на стороне сервера.В результате пользователь отправил форму, а браузер отправил запрос POST.Если вы отобразите такой веб-сайт в своем браузере и нажмете «обновить», Firefox не просто перезапустит страницу, но и на самом деле захочет снова отправить полный POST-запрос.

Поскольку этот запрос мог состоять в том, чтобы перевести $ 1000 навашей бывшей жене (читай: есть побочные эффекты) браузер запрашивает подтверждение.

Возможным решением будет последующий успешный вход в систему с перенаправлением на другую страницу, чтобы последним HTTP-запросом былGET, а не POST-запрос.

1 голос
/ 26 августа 2011

Это потому, что он повторно вводит введенные данные, чтобы решить это просто перенаправить пользователя после входа в систему.Это должно идти перед любым выводом (то есть без операторов HTML или echo / print).

header('Location: profile.php'); //Or wherever you want them to go
0 голосов
/ 26 августа 2011

Я почти уверен, что это вызвано доступом к базе данных,

Я почти уверен, что это вызвано отправкой формы. Firefox предупредит вас, что вы собираетесь повторно отправить форму, которая уже была отправлена ​​один раз.

0 голосов
/ 26 августа 2011

Это нормальное поведение веб-страницы.Если вы обновите браузер, вы заметите, что вы уже отправили эту информацию через почтовую форму, и попросите вас сделать это снова.

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