№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Название |
---|
Баг?
Фича.. при переходе с .ru на .com меняется домен, а значит, сессии не сохраняются
А вот на google.com если я авторизован, то на google.ru тоже
В принципе это делается, например, несколькими редиректами
А как предлагается фиксить этот "баг"? Это же разные домены, там разные куки, всё логично. Если вы, например, залогинитесь на yandex.ru, то не будете залогинены на yandex.com. Возможным решением было бы en.codeforces.com и ru.codeforces.com, но это сломает существующие ссылки.
А вы попробуйте yandex.kz и yandex.ua
И кстати, ваш аргумент не работает с www.codeforces.ru и codeforces.ru, там тоже отдельная авторизацияКажется,www.уже выпилилиТак куки это не единственное место где можно хранить идентификатор сессии. :)
Какое ещё место предлагаете? Query parameters в URLе? Это очень неправильно. HTML5 Local Storage? Не у всех новые браузеры, и та же проблема с доменами.
Есть конечно вариант при авторизации поставить куки на оба домена (с помощью какого-нибудь кривого хака), но кривые хаки имеют свойства порождать множество неожиданных проблем.
Query-параметры в урле используют, да... Ещё hidden-поля используют — но это всё годится только для переходов по ссылкам в теле отрендеренного нами же документа. Идею с Local Storage слышу впервые — браузеры-то у всех новые, но разве localstorage будет шариться между страницами разных доменов? :)
Гугл наверняка использует не совсем такие механизмы. По-видимому на просторах интернета народ уже задавался этим вопросом, так что я лучше не буду перевирать ответы со стековерфлоу типа этого.
Query-параметры ни для чего не годятся, хотя бы из соображений безопасности.
Про local storage не знаю, я же написал, что там тоже с доменами будут проблемы, я просто перечислил всё что теоретически можно было бы использовать.
По вашей ссылке предлагают использовать OpenID, (т.е. очень грубо говоря (если я правильно всё помню), использовать аутентификацию на каком-то third-party домене, который подтвердит то, что пользователь залогинен, по запросу codeforces, после чего codeforces может поставить свою куку). Но OpenID тут и так поддерживается, кто хочет — уже им пользуется.
И да, даже в случае OpenID, идентификатор сессии всё равно хранится в куке. Так что жду предложений, где ещё его можно хранить =)
Да не, OpenID тут сам по себе мало чем поможет, я видимо ссылку не с той страницы скопировал.
Мы если в страницу вставляем javascript с третьего сервера — например гугл аналитику или фейсбук логин — то этот javascript создаёт куки привязанные к какому домену?
UPD. Опять вру. А меж тем куки чужие каким-то образом появляются. Даже на текущей странице codeforces.
В случае со всякими гугл-аналитиками — да, куки для разных доменов, и они не могут понять, что один и тот же пользователь заходил на 2 разных сайта (да и не должны — это было бы privacy violation).
А вот фейсбук-кнопочки гораздо злее — там iframe'ы, и они живут в фейсбуковском домене.
А что за фейсбук логин? Вы имеете в виду OAuth? Там всё гораздо хитрее.
Есть такой аргумент: это как-то пофиксили Яндекс и Гугл. Значит, это возможно. Значит, это должно быть сделано. Меня, как пользователя, не очень волнует "красивость" решения, мне надо, чтобы у меня работало и, по возможности, относительно безопасно.
Например, можно завести один конкретный домен для логина. Скажем,
auth.codeforces.com
и всё проводить через него при помощи редиректов.Отличный аргумент. Я ж прям в комменте на который вы отвечаете написал: залогиньтесь на yandex.ru и зайдите на yandex.com. По такой "логике", наверное есть причины, почему яндекс этого не делает, т.е. не всё так однозначно?
Далее, я ничего не говорил про "красивость" (почему такое странное слово? в русском языке же есть существительное "красота") решения, более того, модель безопасности браузеров настолько кривая и похаканная, что ожидать чего-либо красивого там не приходится. Однако пытаться нахакать cross-domain авторизацию редиректами, не имея https, — почти наверняка приведёт к багам в безопасности.
Теперь по сути. Посмотрел, что делает yandex.ua. Оно редиректит на pass.yandex.ru, браузер отдаёт туда куку, после чего pass.yandex.ru редиректит на pass.yandex.ua с query-параметром, по всей видимости содержащим одноразовый токен; получив этот токен, yandex.ua ставит свою куку. Если я правильно понял этот процесс, то с https он видимо безопасен, а вот без https враг (например, слушающий трафик в халявном вайфае) может использовать одноразовый токен раньше вас. Впрочем, можно сделать server-side "защиту" — если токен попытались использовать второй раз за корокий промежуток времени, считать сессию невалидной.
В любом случае, эта схема выглядит достаточно secure'но на фоне того, что codeforces не использует https. Так что ИМХО, можно и сделать. И надо начинать именно с конкретных технических предложений, а не постов "я пользователь, у вас баг, сделайте чтобы было хорошо!11". Здесь всё же сообщество по программированию, а не по вышиванию крестиком...
А разве с тем же успехом нельзя в http похакать заголовки, в которых данные cookie, в которых session_id?
Да, можно, но для этого обязательно слушать весь трафик. В случае query-параметров всё хуже, например, их по умолчанию всякие прокси логгируют, да и вообще, RFC говорит, что девелоперы не должны полагаться на секретность URLа.
А почему бы не отправлять post-запрос с параметром временного токена?
А в чём проблема? Реализуется по принципу OpenID.
UPD. Да, ну вобщем-то, яндекс (как и все остальные) и реализует это по такому принципу, как Вы и описали выше
Хм, почитал, что делает OpenID, очень похоже на схему в yandex.ua. Да, так можно сделать, но возникает 2 вопроса:
1) Codeforces и так поддерживает OpenID, а чём проблема им пользоваться?
2) Зачем писать посты "всё плохо, сделайте так чтобы было хорошо", когда можно вносить конкретные технические предложения? Не все же знают как OpenID работает.
2) А если, например, мозгов не хватает, чтобы внести конкретное предложение, но хватает, чтобы понять, что что-то не так и так быть не должно?
Тогда это отличный повод потратить время на то, чтобы разобраться в теме, и уже после этого внести конкретное предложение. Узнать что-то новое в своей области — всегда круто.
Сообщество так не считает XD
Сторонний OpenID тут имеет другое значение — он мне просто даёт возможность не регаться ещё раз на кф, а логиниться просто по существующей где-то регистрации. И он решает проблему только тем, кто через него логинится.
А если я захожу не по стороннему OpenID, а, например, по логин-паролю, то возникает означенная проблема. И для этого как раз и реализуется собственный OpenID. Вообще его не сложно и не долго реализовать.
Ну можно например выбрать одного фиксированного OpenID-провайдера и автоматически пробовать авторизоваться через него для незалогиненных пользователей. Ну или да, сделать своего OpenID-провайдера. Единственная проблема — для незалогиненных пользователей будут дополнительные тормоза из-за редиректов; да, можно сделать workaround'ы и для этого, но ИМХО для незалогиненных пользователей это не круто.
Вообще говоря, у codeforces всего 2 заранее известных домена, поэтому, казалось бы, можно сделать всё в другую сторону: при логине ставится одна кука + при помощи редиректа с query-параметром ставится вторая. Кажется, такой вариант самый добрый, если я правильно всё понимаю.
А как яндекс решает эту проблему? Они же тоже должны всегда отправлять запрос на pass.ya
Редирект по цепочке доменов забавное решение :)
Проверка поможет ли, если вставлять через dropdown в редакторе:
tourist
1
1A - Театральная площадь
Codeforces Beta Round 1
результаты
UPD: Да, работает. Отсюда вывод: не вставляйте ссылки руками, CodeForces сам умный.
Не слишком гибко. Нельзя так: Гена
Мне вот интересно стало, если кого-нибудь упомянуть в комментариях то ему приходит оповещение?
Думаю что нет, иначе бы скорее всего была возможность отключить. Ну или...
Почта Гены:
Входящие (over100500)
azizkhan, Превед!
nurzhands Медвед!
azizkhan, nurzhands, mexmans, узбагойдесь!
Мне кажется, эта проблема скорее относится к англоязычным пользователям сайта, потому как именно они используют codeforces.com. Так что лучше было бы постить это на английском
Естественно, что, пока это не будет исправлено в системе, 99% пользователей об этом даже не задумается.
Для себя я решил проблему простым перенаправлением с .com на .ru. Можно, например, использовать это расширение: https://addons.mozilla.org/ru/firefox/addon/redirector
Спасибо, попробую
Извиняюсь за некропост, просто хотел заметить, что для Codeforces не проблема делать это автоматически при отправке текста — детектить имя домена в ссылках и превращать их в относительные.