Обработка формы - использовать сессии, или нет?

Фанат

oncle terrible
Команда форума
Обработка формы - использовать сессии, или нет?

Собственно, общепринятое мнение на этом форуме состоит в том, что сессии не нужны - выводить при ошибке форуму, и всё.

При том, что, вообще-то, нарушается принцип обязательного локейшена.
И человек, с ошибкой заполнивший форму, а потом жмущий "Назад", нарвется, таки, на то самое сообщение.

Вдобавок к этому, по хорошему, нам бы все равно сессию стартовать (или использовать) при работе с формами, поскольку это никак не отражается на юзабилити, а защита от флудерасов требуется все чаще и чаще.

Я вот, склоняюсь к тому, чтобы использовать сессии для обработки формы и, в частности - именно через них делат обработку ошибок заполнения.

А вы как думаете?
 

mani13

Новичок
ИМХО, всё зависит от размера формы... если несколько полей(не textarea), то можно вообще отправить на незаполненную форму...

А если брать большие формы, то я всё-таки склоняюсь с сессиям, хотя бы потому, что у меня, например, форма и обработчик могут храниться вообще в разных файлах, только главное почистить сессию после успешного заполнения :)
 

Demiurg

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

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Фанат
И человек, с ошибкой заполнивший форму, а потом жмущий "Назад", нарвется, таки, на то самое сообщение.
Вопрос: а на что может нарваться человек, жмущий "Назад" в случае использования сессий?
 

Фанат

oncle terrible
Команда форума
да, в общем, ни на что, как мне кажется.
на незаполненную форму.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Фанат
да, в общем, ни на что, как мне кажется.
на незаполненную форму.
или на форму, заполненную другими данными: данные-то в сессии могут поменяться.
 

Фанат

oncle terrible
Команда форума
подразумевается, что при использовании данного механизма, различные формы уникально идентифицируются

-~{}~ 16.01.05 21:23:

пока получается так.
при обнаружени ошибки в заполнении формы, в сессии заводится новый элемент специального массива из двух элементов: идентификатор формы с ошибкой и массив _ПОСТ.
затем делается локейшен с передачей в гете этого дентификатора.
при прохождении проверки элемент из формы стирается.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Фанат
пока получается так.
при обнаружени ошибки в заполнении формы, в сессии заводится новый элемент специального массива из двух элементов: идентификатор формы с ошибкой и массив _ПОСТ.
затем делается локейшен с передачей в гете этого дентификатора.
при прохождении проверки элемент из формы стирается.
Угу, теперь понятно.

Тут, правда, вылезают прочие вопросы, например: не может ли это использоваться для DOS атаки? Пусть у нас в форме для отправки сообщения поле "текст" с правилом "не более тысячи символов". Будем ли мы пихать в сессию весь мегабайт текста, который нам прислали из "неправильно заполненной формы"?

Насколько я вижу, хранение данных в сессии и пересылка на другую страницу могут быть нужны только для красивой работы кнопки "Назад". Всё остальное может быть сделано (пусть даже и с сессиями) без редиректа.

Ещё один вопрос, зачем человеку использовать кнопку "Назад" при заполнении формы? Первым на ум приходит вариант "чтобы флудить".
 

Фанат

oncle terrible
Команда форума
Насколько я вижу, хранение данных в сессии и пересылка на другую страницу могут быть нужны только для красивой работы кнопки "Назад".
именно так.
Значит, твоё мнение по этому вопросу: овчинка выделки не стоит. Принято.
Ещё один вопрос, зачем человеку использовать кнопку "Назад" при заполнении формы? Первым на ум приходит вариант "чтобы флудить".
не при заполнении формы, а ПОСЛЕ заполнения формы.
это очень логичное поведение.
 

Screjet

Новичок
Согласен с обоими.
Но идею Фаната использую для важных данных (непример, поля данных кредитки). Далее выводится красивое подтверждение (взятое из сессии) и юзер либо возвращается на корректировку, либо подтверждает (оплату, например).
 

IntenT

SkyDiver
А зачем при ошибке в форме делать редирект?
Если форму рисует о обрабатывает один скрипт - вполне логичным мне кажется при ошибке в валидации просто перерисовать форму и вывести сообщение об ошибке. А вот если все ок - то редирект куда следует.
 

Фанат

oncle terrible
Команда форума
Ну как же! на форуме пхпклуба - и не обойтись без чукчанечитателей-чукчаписателей!
А зачем при ошибке в форме делать редирект?
вообще-то, нарушается принцип обязательного локейшена.
И человек, с ошибкой заполнивший форму, а потом жмущий "Назад", нарвется, таки, на то самое сообщение.
 

IntenT

SkyDiver
Фанат
[q]При том, что, вообще-то, нарушается принцип обязательного локейшена.[/q]

Был неправ, потому что как-то не додумался, что форму можно 2 раза неправильно заполнить, а потом нажать Назад.

Таки да, чукча
 

Фанат

oncle terrible
Команда форума
можно и один раз.
просто после того, как ты заполнил форму, совсем не обязательно, что ты пойдёшь вперед.
вполне можно и назад пощёлкать, в момент, который был перед тем, как ты начал заполнят форму.
и если при заполнении была одна ошибка, то ты, кликая назад, нарвёшься на предупреждение в томместе, где тебе выводилось сообщение об ошибке.

собственно, именно этим и вызван мой вопрос
 

IntenT

SkyDiver
Фанат
Мало что понял, но это очевидно моя проблема. здесь все-таки схема переходов нужна.
 

Кром

Новичок
Автор оригинала: Sad Spirit
Тут, правда, вылезают прочие вопросы, например: не может ли это использоваться для DOS атаки? Пусть у нас в форме для отправки сообщения поле "текст" с правилом "не более тысячи символов". Будем ли мы пихать в сессию весь мегабайт текста, который нам прислали из "неправильно заполненной формы"?
Почему не пихать _POST данные в сессию после проверки?

>у сессий свои подводные камни и реализовать сложнее.

Что за камни?


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

svetasmirnova

маленький монстрик
Кром
>Что за камни?
Я не знаю, о чём говорит Demiurg , но у меня разок проблемы возникали, когда мне не понравилось, что сессия не закрывается после закрытия окна браузера при условии, что под ним открыто ещё одно. Больное воображение нарисовало злобного хакера, открывшего pop-up окно и затем лично пробравшегося к столу админа:)
 

Кром

Новичок
svetasmirnova, это проблемы безопасности, которые не относятся к проблемам данного топика.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Кром
Почему не пихать _POST данные в сессию после проверки?
А после проверки их надо уже пихать в базу и делать редирект на страницу с надписью "Спасибо". Зачем они в сессии?
 

Кром

Новичок
>А после проверки их надо уже пихать в базу и делать редирект на страницу с надписью "Спасибо". Зачем они в сессии?

В этом случае никто и не планирует пихать их в сессию. Насколько я понял, речь шла о "неправильно заполненной форме". Тогда отрезаем от текста лишние мегабайты, оставшийся огрызок пишем в сессию с фразой или кодом ошибки.
Естественно, размер того же текста изначально стоит проверять JavaScript'ом, чтобы пользователи не возмущались о потере написанного текста.
 
Сверху