Андрей К.
1172 сообщения
#15 лет назад
Дано:
1. Два разных домена второго уровня, работают на одном VDS.
2. Авторизация основана на кукисах.
3. PHP

Надо:
Пользователь логинится на первом домене и автоматически распознается на втором.

Кто знает способы?
Роман Беляев
16382 сообщения
#15 лет назад
Во фрейме открыть второй домен и проставить оттуда куки. Это предположение. Вроде как поставить куки другого домена как и прочитать куки чужого домена - нельзя. Так что вроде того как-то. А вообще почитать про методы увода кукисов через js и заюзать
Роман Беляев
16382 сообщения
#15 лет назад
А нет - оставить авторизацию на одном домене и там хранить учетки и все дела, а на втором только саттелит сделать. Но это трафик будет между сайтами. Хотя с другой стороны решаются проблемы с синхронизацией профилей и остальным гамузом по управлению пользователями, если это конечно нужно. + кеширование на саттелите и должно работать.
Андрей К.
1172 сообщения
#15 лет назад
Смысл всей затеи такой, чтобы залогинившись на одном домене, пользователь мог выбрать язык сайта, и в случае выбора языка, отличного от русского, попадал на второй домен, где повторная авторизация не должна требоваться.
Владимир М.
578 сообщений
#15 лет назад
Сделать выбор языка до авторизации не пробовали ))?
или это противоречит Концепции?
Владимир М.
578 сообщений
#15 лет назад
Кстати!
Цитата ("Lisio"):
и в случае выбора языка, отличного от русского, попадал на второй домен
- вот это "попадал" у вас как реализовано? редиректом? ну сделайте так:
1. на сателлите есть страничка X - на ней реализован механиз авторизации с приемом двух параметров - логина и хеша пароля
2. редиректор с ведущего сайта вызывает страничку X - передавая ей текущий логин и хеш пароля (чтоб в открытую сам пасс не кидать)
3. старничка X ловит пару парметров - сравнивает с хешом пасса который считает сама , подтверждает валидность юзвера и ставит уже свои кукисы (все это должно быть исполнено точь-в точь как на первом сайте, с той лишь разницей что на 1м сайте принимется через пост лог и пасс а на сателлите через гет лог и хеш. но далее, кода поставлен флаг - типа юзер валиден - простой копипаст кода с первого сатйа.
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("vladmax"):
Сделать выбор языка до авторизации не пробовали ))?

А выбор языка только до авторизации - это вы считаете хорошее юзабилити?

Цитата ("vladmax"):
вот это "попадал" у вас как реализовано? редиректом? ну сделайте так:

Это реализовано обычной ссылкой с параметром выбираемого языка. Ваш метод требует наличия хэша пароля либо в виде параметра GET, либо параметра POST в форме, причем на всех страницах сайта, так как выбор языка можно сделать в любой момент. Не самый безопасный вариант.
Владимир М.
578 сообщений
#15 лет назад
Конечно все это костыли. объективно надо переделать сайт под мультиязычность и не заморачиваться потом на поддоменах...
---------
хм. ну да, опасно. тогда кнопка сменить язык на первом сайте ведет на страницу Y первого сайта (например changelang.php), этот changelang проверяет валидность, генерит хеш, кидает все это дело на страницу X воторого сайта. то есть хеш теперь нигде не указывается..
Андрей К.
1172 сообщения
#15 лет назад
В том-то и дело, что заказчик хочет сделать разные домены для разных языков. И не на поддоменах (тут бы вопросов не возникло), а на разных доменах.

Любые вариации на тему генерации параметра и редиректа в той или иной форме - костыль. Возможно, есть какой-то метод решения этого через кукисы или сессии, о котором мне не известно. Либо это невозможно сделать без костылей.
Никита К.
1594 сообщения
#15 лет назад
При выборе языка сохраняем IP и UA в БД, редиректим, второй домен проверяет наличие записи с нужным IP и UA и авторизоывает пользователя...
MySQL сервер же один... =)
Если нет возможности коннектиться к MySQL - можно сохранять в файл и чиать из файла...
Артём К.
1157 сообщений
#15 лет назад
Цитата ("Lisio"):
Либо это невозможно сделать без костылей.


Невозможно.
Евгений Б.
5330 сообщений
#15 лет назад
Сделать авторизацию через JS "счетчик", который будет на 1 домене.. гугл или яша или другие так всех и палят..
Владимир М.
578 сообщений
#15 лет назад
Ну если трогать скуэль то еще проще - при редиректе присоединяем в запрос какой нибудь сгенеренный на лету ЮИД к урлу вызываемой страницы на серваке 2 и параллельно пишет этот юид в базу, а стьраница на серв2 она читает этот юид из мускуэля
Роман Беляев
16382 сообщения
#15 лет назад
А если такой костыль - при авторизации делаем пару редиректов - сначала на родной сайт, потом на второй сайт и везде, фактически, логинимся. Везде проставляем куки. Пользователь ничего не заметит, реализовать вроде как не сложно совсем - минимальные изменения от простой авторизации.
Владимир М.
578 сообщений
#15 лет назад
Frig
+отличная мысль
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("Anexroid"):
При выборе языка сохраняем IP и UA в БД, редиректим, второй домен проверяет наличие записи с нужным IP и UA и авторизоывает пользователя...

Безопасность очень сильно страдает. Фактически для кражи учетной записи достаточно подключиться под IP пользователя или использовать его как проксю.

Цитата ("ArtPro"):
Сделать авторизацию через JS "счетчик", который будет на 1 домене.. гугл или яша или другие так всех и палят

Можно подробнее, плз?

Цитата ("frig"):
при авторизации делаем пару редиректов - сначала на родной сайт, потом на второй сайт и везде, фактически, логинимся.

И тупо получаем ошибку в огнелисе, если доменов будет 5. Нерасширябельный метод.
Роман Беляев
16382 сообщения
#15 лет назад
Цитата ("Lisio"):
И тупо получаем ошибку в огнелисе, если доменов будет 5. Нерасширябельный метод.


Ну на счет ошибки не знаю тонкостей. Если по кругу перенаправляет, тогда да. А если по разным сайтам - не знаю.
Ну дык речь была про 2 домена. Если их будет много, то тогда точно хранить централизовано все, а проверять пользователя через фрейм.
Роман Беляев
16382 сообщения
#15 лет назад
Хэш пароля передавать постом при переходе, конечно глупость, а вот передавать некую последовательность по которой пользователь идентифицируется как через куки - вполне. По безопасности это будет практически тоже самое что куки. В общем то самое по чем происходит идентификация через куки - тоже самое храним на страничке и передаем постом при переходе.
Вадим Т.
3240 сообщений
#15 лет назад
Предлагаю такой вариант:

При редиректе на сайт на втором домене, добавлять параметром текущий SESSIONID (брать из кукисов на первом сайте).
На втором сайте устанавливать этот ID функцией session_id(...).
При этом важно, чтобы сессии обоих сайтов хранились в одном и том же месте, то есть или в одном и том же каталоге, или в базе данных.
Таким образом оба сайта будут использовать один и тот же SESSIONID и соответственно одни и те же хранимые в сессии данные.

Можно использовать и разные SESSIONID, но тогда при редиректе на второй сайт все равно нужно передавать текущий SESSIONID, и копировать данные этой сессии первого сайта в новую сессию второго сайта.
Андрей К.
1172 сообщения
#15 лет назад
В общем из всего описанного стало ясно, что наиболее оптимальный вариант - при нажатии на ссылку другого языка сделать следующее:
1. Через аякс вызвать скрипт, который генерирует запись в БД с уникальным идентификатором (по типу md5), IP и авторизационными данными. На выходе - идентификатор.
2. Через js перейти на специальную страницу нового домена с параметром из п.1 и прописать в кукисы параметры пользователя из базы, удалив из базы эту запись и все, у которых срок давности больше минуты.
3. Редирект на главную страницу нового домена.

В итоге получаем небольшое замедление при переходе и отсутствие авторизации, если адрес второго домена набран вручную. Итог - костыль. Надо к нему второй подобрать, а то пока инвалид.