Коллеги, в нашей системе есть одна плавающая ошибка, которую мы никак не можем поправить. Нужны ваши идеи – в чем может быть дело.
Ситуация следующая:
1. Веб-приложение на ASP.NET
2. Страница содержит массу hidden полей, причем небольшая часть создается на сервере (runat=server), основная же масса hidden создается на клиенте через jscript.
3. Редко (~1 раз на 10 000 postback’ов), под разными браузерами возникает ситуация. Пользователь наживает на ОК. Jscript вызывает doPostback().
— Происходит постбэк, но на сервере отсутствуют значения Request.Form[“…”] для созданных с помощью Jscript hidden’ов
— Hidden’ы созданные на сервере имеют значения, которые были изначально. Изменения значений этих hidden’ов, выполненные через Jscript на сервер не приходят.
— Мы сохранили полностью Request.InputStream (весь POST запрос) и увидели что в в запросе полностью отсутствуют hidden’ы, созданные на клиенте, а hidden’ы созданные на сервере приходят с начальными значениями.
4. Важный момент. Перед вызовом doPostback с помощью Jscript происходит проверка значений hidden’ов. Все hidden’ы доступны через Jscript и имеют корректные значения.
Вопрос. Что может произойти такого, что форма не отправляет на сервер созданные Jscript’ом значения, а созданные на сервере hidden’ы отправляются в изначальном виде (хотя они менялись Jscript’ом)? И это происходит крайне редко, у разных пользователей примерно 1 раз на 10-20 тыс. постбэков.
Очень нужны ваши идеи!!
Готов подарить новенький iPhone 5S или его денежный эквивалент тому, кто поможет найти ошибку.
Re: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.
2) После сабмита не пытаетесь форму модифицировать на клиенте? Может там гонки какие-нибудь
S> — Мы сохранили полностью Request.InputStream (весь POST запрос) и увидели что в в запросе полностью отсутствуют hidden’ы, созданные на клиенте, а hidden’ы созданные на сервере приходят с начальными значениями.
А это вообще похоже, что JS у клиента отключен. Вместе с проверками значений хидденов
Re[2]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
S>>Очень нужны ваши идеи!!
A>1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.
Плагины не используются, везде нативный JS.
A>2) После сабмита не пытаетесь форму модифицировать на клиенте? Может там гонки какие-нибудь
Об этом не думали, посмотрим.
S>> — Мы сохранили полностью Request.InputStream (весь POST запрос) и увидели что в в запросе полностью отсутствуют hidden’ы, созданные на клиенте, а hidden’ы созданные на сервере приходят с начальными значениями.
A>А это вообще похоже, что JS у клиента отключен. Вместе с проверками значений хидденов
Нет, у него все работает в основном. Ошибка плавающая, возникает крайне редко.
Re[3]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
A>>1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.
S>Плагины не используются, везде нативный JS.
Я имел ввиду не ваши плагины, а AdBlock и прочие Firefox/Chrome/Opera extensions
Re: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
On 26.02.2014 12:17, sharpcoder wrote:
> Вопрос. Что может произойти такого, что форма не отправляет на сервер > созданные Jscript’ом значения, а созданные на сервере hidden’ы > отправляются в изначальном виде (хотя они менялись Jscript’ом)? И это > происходит крайне редко, у разных пользователей примерно 1 раз на 10-20 > тыс. постбэков. > Очень нужны ваши идеи!!
Возможно в ходе js-проверки перед сабмитом в случае сочетания каких-то
маловероятных событий форма повторно запрашивается с сервера после
проверки последнего поля, но перед вызовом сабмита. Или "вторая" форма в
этом случае изначально есть на странице (возможно не отображаемая) и
проверка выполняется по "первой" форме, а отправляется "вторая". Или при
сабмите формы происходит ошибка (не устанавливается соединение с
сервером, таймаут и т.п.), а повторно сабмитится очищенная форма. Много
чего может быть, не видя дошедшего до клиента хтмл+жс сказать сложно.
--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
Здравствуйте, sharpcoder, Вы писали:
S>Коллеги, в нашей системе есть одна плавающая ошибка, которую мы никак не можем поправить. Нужны ваши идеи – в чем может быть дело. S>Ситуация следующая: S>1. Веб-приложение на ASP.NET S>2. Страница содержит массу hidden полей, причем небольшая часть создается на сервере (runat=server), основная же масса hidden создается на клиенте через jscript. S>3. Редко (~1 раз на 10 000 postback’ов), под разными браузерами возникает ситуация. Пользователь наживает на ОК. Jscript вызывает doPostback(). S> — Происходит постбэк, но на сервере отсутствуют значения Request.Form[“…”] для созданных с помощью Jscript hidden’ов S> — Hidden’ы созданные на сервере имеют значения, которые были изначально. Изменения значений этих hidden’ов, выполненные через Jscript на сервер не приходят. S> — Мы сохранили полностью Request.InputStream (весь POST запрос) и увидели что в в запросе полностью отсутствуют hidden’ы, созданные на клиенте, а hidden’ы созданные на сервере приходят с начальными значениями. S>4. Важный момент. Перед вызовом doPostback с помощью Jscript происходит проверка значений hidden’ов. Все hidden’ы доступны через Jscript и имеют корректные значения.
Вы на 100% уверены что произошел вызов через doPostback? может где-то есть обходной маневр?
Попробовать сделать при doPostback менять адрес, допустим, чтоб различить отправку им или, допустим, чем-то не явным...
Re[4]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
A>>>1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.
S>>Плагины не используются, везде нативный JS.
A>Я имел ввиду не ваши плагины, а AdBlock и прочие Firefox/Chrome/Opera extensions
Нет, у нас 1 раз (за год!) выпала такая ошибка при тестировании на "чистой" тестовой машине.
Re[5]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!