БАГ с перерисовыванием страницы
|
demon51085 05/28/10 02:19 AM |
|
Кажется при перерисовывании страницы Opera v10.53 (остальные версии не проверял) не обращает внимания на содержимое тега img а именно на параметр src которым обычно задается путь до картинки. Дело в том что разработчики не учли что в src может быть как путь до изображения, так и путь до СКРИПТА генерирующего изображение (например src="captcha.php" - скрипт для генерации капчи), так что при перерисовывании страницы идет повторное обращение к этому скрипту. А теперь представьте ситуацию... пользователь заходит на страницу с капчей... выполняется скрипт генерации изображения и запись содержимого этого изображения в $_SESSION (таков скрипт). Через секунду либо после полной загрузки страницы (по умолчанию через секнду) происходит перерисовывание страницы, следовательно повтороное обращение к скрипту генерации изображения (ибо он задается как src="captcha.php" в теге img). Этот скрипт генерирует новое значение, ПЕРЕЗАПИСЫВАЕТ $_SESSION, а картинка то остается СТАРАЯ!!! В итоге получается что на картинке одно, а в сессии уже другое значение. Результат - пользователь вводит в форму значение с капчи, форма летит в обработчик, обработчик сверяет введенное пользователем значение с тем что в сессии и показывает ему фигу ибо в сессии совсем другое значение, "благодаря" тому что Opera сделала повтороное обращение к src (перерисовывание) не обращая внимания на то, что там не адрес до изображения, а адрес до СКРИПТА.
Как я выявил этот баг:
2 дня мучался чтоб понять почему на картинке одно, а в сесси другое. Это выглядело парадоксально. Я подумал что проблемма в кэше. Отключил в настройках оперы всё что было связано с кэшированием... очистил кэш... добавил в скрипт антикэширующие заголовки... сделал путь до скрипта вида src="captcha.php?id=<?=mt_rand()?>" для добавления случайного числа к URL, чтоб запрсы были уникальными... ничего не помогало! Потом обнаружил что в других браузерах этой проблеммы нет. Короче спустя пару дней до меня дошло что происходит двойное выполнение скрипта генерации и что такое может произойти только при перерисовывании страницы.
|
Re: БАГ с перерисовыванием страницы
|
iNDiAnFLy 05/28/10 11:28 PM |
|
заметь, что происходит такое только с твоим скриптом
|
Re: БАГ с перерисовыванием страницы
|
demon51085 05/29/10 10:49 AM |
|
заметь, что происходит такое только в опере. хотя это происходит не каждый раз (50/50). видимо когда страница перерисовывается ДО выполнения скрипта, то всё ок, а если ПОСЛЕ то при перерисовывании происходит повторное выполнение.
|
Re: БАГ с перерисовыванием страницы
|
demon51085 05/29/10 11:10 AM |
|
т.е. опера перерисовывает элементы находящиеся в тегах img только у меня? ты хоть думай прежде чем ляпнуть.
|
Re: БАГ с перерисовыванием страницы
|
extreme 05/29/10 12:29 PM |
|
demon51085 По крайней мере у себя такого не замечал...Как вариант попробуй Настройки/Расширенные/Навигация/Перерисовывать страницу непрерывно
|
Re: БАГ с перерисовыванием страницы
|
demon51085 05/29/10 03:54 PM |
|
ещё лучше блин. вместо двойного выполнения получем многократное. даже отключение перерисовывания не стало бы решением проблеммы, ибо это является проблеммой не для меня, а для пользователей моего сайта.
как временное решение добавил в скрипт строчку, проверяющую наличие капчи в сессии. т.е. если скрипт один раз отработал и капча записалась в сессию, то при повторном обращении (из-за перерисовывания страницы) не перезаписывать значение в сессии.
но надо чтоб опера сама не перерисовывала тег img, если в нем находится не картинка а скрипт. или хотя бы показывала повторно сгенерированную картинку, а то скрипт выполняется дважды, а картинка показывается от первой генерации (наверно потому что перерисовывание не затрагивает mt_rand. т.е. к скрипту идет повторное обращение с тем же url).
короче надо чтоб опера не перерисовывала тег img, если в нем находится не картинка а скрипт.
|
Re: БАГ с перерисовыванием страницы
|
extreme 05/29/10 04:35 PM |
|
_//validator.w3.org/_ И свое творение представить не хочешь..? авось кто поможет...
|
Re: БАГ с перерисовыванием страницы
|
demon51085 05/30/10 01:23 PM |
|
с кодом кажется всё нормально. да и валидатор ругается только на счетчики (спайлог, лайвинтернет, рамблертоп100. к делу не относится). повторяю ещё раз проблемма только в Опере и скорее всего из-за того что при перерисовывании она не обращает внимания что там указано в теге img картинка или скрипт. <td><img id="captcha" src="blocks/captcha.php?img_id=<?=mt_rand()?>" alt="captcha"></td> результат - двойное выполнение скрипта.
|
Re: БАГ с перерисовыванием страницы
|
iNDiAnFLy 05/31/10 06:09 AM |
|
ты не думал о том. что у тебя просто сама реализация скрипта на стороне сервера кривая?
|
Re: БАГ с перерисовыванием страницы
|
Eismann 05/31/10 07:54 AM |
|
Выложи кусок кода да тестовую страничку сделай, чтобы все могли потестить.
|
Re: БАГ с перерисовыванием страницы
|
demon51085 05/31/10 11:29 AM |
|
мда... люди совсем не умеют читать. говорю же проблемма только в Опере. А вот в Mozilla Firefox v3.6.3, Google Chrome v4.1.249.1064 и IE 8 всё работает четко! да и в Опере этот глюк проявляется не всегда (примерно 50/50). это всё косяки оперы. спасибо, но в оптимизации своего кода не нуждаюсь. ни первый год пишу на php. я топик написал для тех у кого будет такая же проблемма, чтоб знали почему такое происходит. если у кого-то нет таких проблемм, то возможно скорость инета большая и перерисовывания не происходит.
|
Re: БАГ с перерисовыванием страницы
|
Ilya 05/31/10 04:40 PM |
|
> А вот в Mozilla Firefox v3.6.3, Google Chrome v4.1.249.1064 и IE 8 всё работает четко! да и в Опере этот глюк проявляется не всегда (примерно 50/50). это всё косяки оперы. спасибо, но в оптимизации своего кода не нуждаюсь. ни первый год пишу на php. я топик написал для тех у кого будет такая же проблемма, чтоб знали почему такое происходит. если у кого-то нет таких проблемм, то возможно скорость инета большая и перерисовывания не происходит.
А чтобы у тебя потом всё работало, неплохо бы отправить баг-репорт с подробным тесткейсом.
|
Re: БАГ с перерисовыванием страницы
|
demon51085 06/01/10 12:13 AM |
|
я бы с удовольствием, но незнаю куда. да и скорее всего нужно будет на инглише, а с инглишом я в ссоре.
|