Почему используются скрытые поля?

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

может ли кто-нибудь сказать мне, что именно является преимуществом, которое скрыто поля дают? Почему используются скрытые поля?

8 ответов


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

варианты:

  • хранение данных на стороне сервера сеанса (с файлом cookie sessionid)
  • хранение данных на стороне сервера транзакций (с идентификатором транзакции в качестве одного скрытого поля)
  • использование URL-адреса вместо параметров запроса скрытых полей, где это применимо

основные проблемы:

  • значение скрытого нельзя доверять полю, чтобы его нельзя было изменять со страницы на страницу (в отличие от хранилища на стороне сервера)
  • большие данные должны быть размещены каждый раз, может быть проблемой, и не представляется возможным для некоторых данных (например, загруженные изображения)

основные преимущества:

  • нет липких сессий, которые разливаются между страницами и несколькими окнами браузера
  • нет серверного очистки необходимо (для устаревшие данные)
  • работает на стороне клиента скрипты

Предположим, вы хотите изменить объект. Теперь полезно поместить ID в скрытое поле. Конечно, вы должны!--3-->никогда не полагайтесь на это значение (т. е. убедитесь, что пользователь имеет соответствующие права на insert/update).

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

хранение идентификатора в сеансе / cookie является запретительным, поскольку он запрещает несколько открыл окна редактирования одновременно и накладывает пожизненные ограничения (тайм-аут сеанса приводит к нарушенной операции редактирования, очень раздражает).

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


наиболее типичное использование, которое я вижу/использую, - это идентификаторы и другие вещи, которые действительно не должны быть на странице по какой-либо другой причине, кроме необходимости в какой-то момент быть отправлены обратно на сервер.

-edit, должен был включить более подробную информацию -

скажем, например, у вас есть какой-то объект , который вы хотите обновить-пользовательский интерфейс отправляет обратно коллекцию значений, и сервер в этот момент может или не может знать "Эй, это объект клиента", поэтому вы запускаете запрос на сервер и говорите " эй, дайте мне ID 7", и теперь у вас есть объект клиента, как его знает система. Обновления применяются, проверяются, что угодно, и теперь ваш пользовательский интерфейс получает завершенный результат.

Я думаю, что хорошее оправдание / аргумент использует linq. Попробуйте обновить объект в linq, не получая его сначала из БД. Он понятия не имеет, что это то, что он может отслеживать, пока вы не получите полный объект.


вот одна из причин, удобный способ передачи данных между клиентским кодом (javascript) и серверной стороной.


есть много полезных сценариев.

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

еще один сценарий-безопасность. Добавьте на страницу скрытый токен и проверьте его наличие на сервере. Это поможет определить, была ли форма отправлена через браузер или каким-то ботом, который только что опубликовал какой-то url на вашем сайте.


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

кроме этого, я не могу думать о слишком многих других преимуществах.


Они обычно используются для хранения состояния по мере развития взаимодействия. Вместо этого можно использовать Cookies, но некоторые люди отключают их. Можно также использовать одно скрытое поле для указания на состояние на стороне сервера, но тогда возникают проблемы с прилипчивостью сеанса.


Если вы используете скрытое поле в форме, вы увеличиваете нагрузку на форму, включив новый элемент управления.

Если нет необходимости принимать скрытое поле, вы не должны принимать его, потому что он не подходит на основе точки безопасности. использование скрытого поля не подпадает под хорошее Программирование. Потому что это также влияет на производительность приложения.