Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
От: sharpcoder Россия  
Дата: 26.02.14 08:17
Оценка:
Коллеги, в нашей системе есть одна плавающая ошибка, которую мы никак не можем поправить. Нужны ваши идеи – в чем может быть дело.
Ситуация следующая:
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!
От: avpavlov  
Дата: 26.02.14 10:08
Оценка:
S>Очень нужны ваши идеи!!

1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.

2) После сабмита не пытаетесь форму модифицировать на клиенте? Может там гонки какие-нибудь

S> — Мы сохранили полностью Request.InputStream (весь POST запрос) и увидели что в в запросе полностью отсутствуют hidden’ы, созданные на клиенте, а hidden’ы созданные на сервере приходят с начальными значениями.


А это вообще похоже, что JS у клиента отключен. Вместе с проверками значений хидденов
Re[2]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
От: sharpcoder Россия  
Дата: 26.02.14 10:50
Оценка:
Здравствуйте, avpavlov, Вы писали:


S>>Очень нужны ваши идеи!!


A>1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.


Плагины не используются, везде нативный JS.

A>2) После сабмита не пытаетесь форму модифицировать на клиенте? Может там гонки какие-нибудь


Об этом не думали, посмотрим.

S>> — Мы сохранили полностью Request.InputStream (весь POST запрос) и увидели что в в запросе полностью отсутствуют hidden’ы, созданные на клиенте, а hidden’ы созданные на сервере приходят с начальными значениями.


A>А это вообще похоже, что JS у клиента отключен. Вместе с проверками значений хидденов


Нет, у него все работает в основном. Ошибка плавающая, возникает крайне редко.
Re[3]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
От: avpavlov  
Дата: 26.02.14 11:44
Оценка:
A>>1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.

S>Плагины не используются, везде нативный JS.


Я имел ввиду не ваши плагины, а AdBlock и прочие Firefox/Chrome/Opera extensions
Re: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
От: hrensgory Россия  
Дата: 26.02.14 11:57
Оценка: +1
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!
От: Plague Россия  
Дата: 26.02.14 12:52
Оценка:
Здравствуйте, 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!
От: sharpcoder Россия  
Дата: 26.02.14 12:56
Оценка:
Здравствуйте, avpavlov, Вы писали:


A>>>1) Сейчас довольно распространены юзерские JS плагины, которые, заботясь о безопасности, могут вырезать данные из форм, особенно если там пароли, емайлы, кредитки, явки.


S>>Плагины не используются, везде нативный JS.


A>Я имел ввиду не ваши плагины, а AdBlock и прочие Firefox/Chrome/Opera extensions


Нет, у нас 1 раз (за год!) выпала такая ошибка при тестировании на "чистой" тестовой машине.
Re[5]: Help! Супер непонятная ошибка. Кто поможет исправить – iPhone!
От: avpavlov  
Дата: 26.02.14 13:29
Оценка: +1
S>Нет, у нас 1 раз (за год!) выпала такая ошибка при тестировании на "чистой" тестовой машине.

Я склоняюсь к мысли, что всё таки ЯваСкрипт не выполнился на клиентской стороне вообще. Может недогрузился, может ещё чего.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.