Почему скрытые поля используются? - PullRequest
17 голосов
/ 21 мая 2010

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

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

Ответы [ 8 ]

18 голосов
/ 21 мая 2010

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

Альтернативы:

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

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

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

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

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

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

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

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

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

4 голосов
/ 21 мая 2010

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

4 голосов
/ 21 мая 2010

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

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

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

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

3 голосов
/ 21 мая 2010

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

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

3 голосов
/ 21 мая 2010

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

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

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

1 голос
/ 07 декабря 2012

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

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

1 голос
/ 21 мая 2010

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

...