Ужасный баг Оперы с куками

Как известно, браузер решает, какие куки слать странице вместе с запросом, на основании того, какие домен и путь прописаны у куки. Причём домены тупо сравниваются своими концами. То есть, кука, оставленная для домена ilyabirman.ru, видна всем доменам *.ilyabirman.ru.

Страшный баг Оперы состоит в том, что если домены ilyabirman.ru и something.ilyabirman.ru создадут куки под именем name, то им обоим будет слаться та кука, которая оставлена для домена ilyabirman.ru. Таким образом, если something.ilyabirman.ru по неосторожности оставил куку с таким же именем, с каким уже успел оставить куку ilyabirman.ru, то он никак не сможет достать её значение.

Другие браузеры понимают, что более «родные» куки должны иметь приоритет...

Из-за этой проблемы мне не удавалось залогиниться в e2, который я поставил в своём поддомене, ведь ему прилетала кука не с тем ключиком, который только что был сгенерен, а с тем, который валиден только для ilyabirman.ru.

Секс с этим багом продолжался несколько часов: записываю в куку значение, а прилетает совсем другое, что за чертовщина!? Всё это ещё и осложнялось тем, что изучаемые куки представляли собой случайные 40-значные шестнадцатиричные последовательности, поэтому чисто визуально понять, что прилетевшая кука относилась к ilyabirman.ru не представлялось возможным. Но, наконец, я вычислил в чём было дело.

Начиная с v1104, e2 приписывает ко всем создаваемым кукам префиксы, состоящие из такого числа знаков подчёркивания, насколько глубоко относительно второго уровня зарыт домен, где он установлен. То есть, сайт something.ilyabirman.ru получает куки, например _key, _commenter_email и так далее.

Это уже второй баг Оперы, который мне пришлось сегодня исправлять самому в e2. Но про первый я даже рассказывать не хочу, там такииииие дебри DOM...

Дальше
3 комментария
Splurov 2005

Хотлесь бы про последнее послушать. Про дебри DOM.

Илья Бирман

Ну лень же писать-то :-) Если сам баг описать ещё можно, то решение описывать я просто застрелюсь...

Splurov 2005

Решение мы сами придумаем :)
Вы баг опишите. Чтобы не натыкаца в будущем )

Илья Бирман

Если вы копируете innerHTML одного нода в innerHTML другого нода, причём эти ноды принадлежат разным объектами Document, а в копируемом innerHTML содержутся input’ы типа text, в которых прописан value, содержащий entity ##&##, то в скопированном куске value на месте этого entity обрежется, и вместо вместо всей оставшейся строки будет стоять символ ##\##...Как-то так.

Splurov 2005

Да, об этом уже где-то читал (ссылки не помню).

Оффтопик: зачем вы меняете пользователю курсор над текстом?.. Таким образом, например, я отличаю поля с label-ом от обычных полей. И вообще текстовый курсор и был сделан для того, чтобы я знал, что данный кусок текста можно выделить. А как с этим поступает Опера и вы на своём сайте — это в какой-то степени извращение.

Илья Бирман

!!Таким образом, например, я отличаю поля с label-ом от обычных полей.!!

А?

Текстовый курсор для меня выглядит так, что я вот могу им ткнуть — и там появится нормальный мигающий курсор, и я смогу его двигать туда сюда, нажимая на стрелочки, и редактировать текст. Текст на сайте не предназначен для редактирования. Выделять его требуется достаточно редко. Вас не смущает, что в диалоговых окнах Windows у вас курсор выглядит как стрелка? То, что делаем Опера и я, — хорошо, и я буду рад, когда все начнут делать так.

Таким образом, на ваш вопрос «зачем вы меняете...», могу ответить: потому, что я считаю, что это правильно.

Мои книги