LINUX.ORG.RU
ФорумTalks

Шикарный (и, похоже, многолетний) баг (или фича) Фокса нашёл


0

1

У фокса «нелокальные» куки на страницах.

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

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

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

Весело, блин. Раскрылась тайна, почему у меня в админке народ с Фоксом нередко переносит не те темы не туда…

★★★★★

Это будет исправлено где-то между тридцатой и сороковой версиями. На данный момент приоритетными являются задачи перерисовывания иконок и новая система управления отвалившимися дополнениями.

thesis ★★★★★
()

А ты в опере можешь открыть два разных gmail ящика? Или я не так понял о изоляции куков?

sdio ★★★★★
()
Ответ на: комментарий от sdio

sdio> два разных gmail ящика

одновременно в разных вкладках

sdio ★★★★★
()
Ответ на: комментарий от thesis

> На данный момент приоритетными являются задачи инкрементирования версий.

fix

geekless ★★
()
Ответ на: комментарий от timur_dav

>Тесткейс и/или багрепорт хотеть сильно

Специальный тесткейс писать лениво, а проверить на готовом можно у меня на форуме, но нужно быть регистрантом. У меня заточка под статический HTML, т.е. страницы топиков могут (сейчас отключено) создаваться голой статикой. Контекстное меню, в т.ч. с операциями над темой — грузится из внешнего файла через JS. Параметры загружаемого файла (в т.ч. номер топика) передаются через куки. Которые устанавливаются в начале страницы. Т.е. цепочка такая:

— В начале статической страницы стоит тупой <script>createCookie('id', '62424')</script>, где 62424 — номер темы.
— Дальше, по ходу текста, используется подгрузка персонального JS-модуля (тоже статического) в духе document.writeln(«<»+«script type=\„text/javascript\“ src=\»/user/«+me_id+»/personal.js\«></»+«script>»)
— В этом personal.js есть ссылки на инструменты работы над темой, для формирования которых нужно знать id темы. Вопросов нет — читаем записанные темой куки и формируем ссылки.

В случае Оперы происходит атомарная операция загрузки страницы. Всё работает, как задумано в любых сочетаниях.

В случае Фокса, если у нас грузятся сразу две страницы, createCookie на второй оказывает влияние на контекст первой. И подгружаемый модуль считывает данные чужой страницы. Если быстро открывать несколько страниц, то ссылки на инструменты одной страницы будут ссылаться на инструменты другой.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от timur_dav

>или багрепорт хотеть сильно

А это уже лениво. Всё равно я для сёрфинга Оперу предпочитаю. А над моим английским в буржуйских багзиллах народ только потешается :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Ну так... эээ... какие-нибудь стандарты вообще оговаривают локальность куков? Если кук установлен для домена, все страницы домена его и видят.

geekless ★★
()
Ответ на: комментарий от KRoN73

Оло-ло, надо таки попробовать и запостить. Т.к., если это действительно так, то попахивает очень эпичной дырой.

timur_dav ☆☆☆☆☆
()
Ответ на: комментарий от sdio

А ты в опере можешь открыть два разных gmail ящика?

Хм... А с этим могут быть проблемы? Я правда не оперой пользуюсь, а хромиумом...

Deleted
()
Ответ на: комментарий от sdio

могу, если один из ящиков будет в приватной вкладке. Вообще, какой смысл иметь кучу ящиков на гмейле? Самим с собой переписываться?

mereku
()
Ответ на: комментарий от mereku

>Вообще, какой смысл иметь кучу ящиков на гмейле?

Один — gmail, другой — google apps на своём домене :)

Но gmail легко переключается между ящиками, так что это о другом.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от timur_dav

>то попахивает очень эпичной дырой.

Да, вроде, не очень. Я не придумал навскидку, как это использовать с точки зрения безопасности. Всё равно куки все твои и сессия вся твоя.

Вот ошибки — да, могут вылезать. Получается, что на время загрузки страницы у Фокса куки не атомарны (и в стандартах, боюсь, такая тонкость нигде не отражены).

KRoN73 ★★★★★
() автор топика

Это фича.
</thread>

CYB3R ★★★★★
()

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

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

Anonymous ★★★★★
()
Ответ на: комментарий от KRoN73

>Передача числа в пределах одной страницы не через window.some_kanda_global_variable, а через куки

Хороший ты человек, Крон, но всё-таки пхпшник.

legolegs ★★★★★
()
Ответ на: комментарий от Anonymous

>по моему если-бы

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

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от legolegs

>>Передача числа в пределах одной страницы

Уже твой fail. Если прочтёшь внимательнее, то увидишь, что там обмен данными между статической страницей и подгружаемым из неё статическим JS-скриптом.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

И что? В статической странице можно сделать

— <script>window.topicid=62424;</script>, где 62424 — номер темы.

— Дальше, по ходу текста, используется подгрузка персонального JS-модуля

— , который легко и непринуждённо работает в том-же контексте, что и js на странице и имеет доступ к window.topicid.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

>который легко и непринуждённо работает в том-же контексте

Понял. То ли я тормозил раньше, то ли торможу сейчас, не находя, что в этом варианте не так. Надо подумать :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от Anonymous

>ну дык куки и придумали для сайд-эффектов?

Они придуманы, как бы, для хранения небольших порций данных на стороне клиента.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

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

legolegs ★★★★★
()
Ответ на: комментарий от KRoN73

ну это'ж не для экономии места на сервере,
а для передачи этих данных между сессиями клиента - что и наблюдаем.

Anonymous ★★★★★
()
Ответ на: комментарий от legolegs

Х.з. Там раньше, по-моему, что-то хитрое использовалось и уже не нужно. Основательно зачистил сейчас код: http://trac.balancer.ru/bors-airbase/changeset/3b63bb39e92094e7b4dabaff8a5f9d... :)

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

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Жесть какая. До сих пор в куки кладётся _width — ширина активной зоны окна браузера. Наследие 10-летней давности, которым лет 6 не пользуюсь :D

KRoN73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.