Отображение сообщения подтверждения формы на той же странице: лучшая практика

Я видел такое поведение на многих веб-сайтах и ​​веб-приложениях, но я не могу найти «чистый и стандартный» способ воспроизвести его: пользователь заполняет форму, отправляет ее, а затем, после успешной проверки, форма перезагружается с сообщением сверху, говорящим что-то вроде «Элемент был сохранен». Пока никаких проблем, я не могу понять, как они продолжают отображать подтверждающее сообщение, если эта конкретная страница перезагружается, но когда пользователь переходит на другую страницу, а затем возвращается к исходной (той, содержащей форму) сообщение больше нет. Кажется, нет данных для получения или отправки, поэтому я предполагаю, что вместо них используются переменные сеанса или файлы cookie, но как они узнают, когда их сохранять, а когда сбрасывать? А может я ошибаюсь и есть какой-то другой способ... помогите мне, пожалуйста!


person Kupido    schedule 28.09.2010    source источник


Ответы (2)


Я предполагаю, что они использовали переменную сеанса, которая сбрасывает себя в момент доступа к этой странице. Поэтому, если они попытаются получить к нему доступ снова, они будут просто перенаправлены.

person Randy the Dev    schedule 28.09.2010
comment
Это не объясняет, как сообщение все еще отображается при перезагрузке страницы. Если вы сбросите переменную сеанса, сообщение больше не должно отображаться. - person Kupido; 28.09.2010
comment
Может быть, он использует HTTP Referrer из заголовков HTTP-запроса, отправленных пользователем? - person Randy the Dev; 28.09.2010
comment
Насколько я знаю, переменная HTTP_REFERER не полностью надежна, я ошибаюсь? Можете ли вы предоставить код? - person Kupido; 28.09.2010
comment
HTTP_REFERER всегда надежен для веб-браузеров, где пользователи не возятся с настройками: $_SERVER['HTTP_REFERER'] получит его в PHP - person Randy the Dev; 28.09.2010
comment
Возможно, я мог бы использовать переменную сеанса для хранения формы и ее URL-адреса, а затем сверить URL-адрес с текущим. Если они совпадают, то должно отображаться сообщение, иначе переменная сеанса должна быть не установлена. - person Kupido; 28.09.2010

Может быть, на странице с формой нет какой-либо «неустановленной» переменной сеанса, а у других есть?

person Shikiryu    schedule 28.09.2010
comment
Как это будет работать с несколькими формами на разных страницах (или даже на одной странице)? - person Kupido; 28.09.2010
comment
Переменная сеанса не обязательно должна быть одинаковой для каждой проверки формы. Например, вы можете использовать $_SESSION['registrationFormValidation'] для регистрационной формы и $_SESSION['contactFormValidation'] для контактной формы. Затем вы можете отключить первый на странице контактов и наоборот. - person Shikiryu; 28.09.2010
comment
Да, это может быть решением, но оно не кажется таким чистым... :) - person Kupido; 28.09.2010
comment
Верно. Но если сайт использует Zend Framework, он может использовать пространство имен (сеанс), чтобы сделать это очень чистым способом. - person Shikiryu; 28.09.2010
comment
Действительно? Мой сайт не основан на Zend Framework, но я думаю, что посмотрю на внутреннюю работу Zend_Form. Спасибо за ваше предложение. - person Kupido; 28.09.2010