| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Запрос с перенаправлением, как организовать? |
| Автор: KPEHDEL 30.7.2013, 17:55 |
| Здравстуйте. Задача: Пользователь авторизуется на одном сайте. Затем пользователь нажимает на ссылку в меню, должно произойти перенаправление передаться одно значение(логин) и авторизация в другом месте. 1. Это разные сервера, сессии не подойдут. 2. Желателен запрос POST. 3. Адрес в браузерной строке должен меняться, чтобы пользователь мог далее перемещаться по сайту в авторизованном состоянии. Случай: Есть сайт, есть форум. Требуется, чтобы авторизация была единой для пользователя. т.е. с сайта переходит на форум и видит, что он там авторизован. Первый сайт никак не взаимодействует с БД второго и второй соответственно. Требуется передавать только логин пользователя. GET не подходит, по причинам открытости. Делал POST с перенаправлением, с помощью curl, но тогда ссылка в браузере не меняется. Подскажите пожалуйста, как решить данную задачу, примеры приветствуются. С нетерпением жду ответа. Заранее спасибо. |
| Автор: Gromdron 31.7.2013, 00:16 |
| Если совсем разные, к примеру forum.ru и site.ru то не вижу путей. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51f7d43e6ccc198719000002#findElement_E7045_51f82d306ccc19591a003ed0_0 |
| Автор: Arantir 31.7.2013, 00:57 |
| Проблема в том, что сессии держаться на куках. А для совсем разных доменов куки не пересекаются. Как минимум это должны быть поддомены того домена, который ставил куки. Другая проблема в том, что ajax-запрос куки не ставит, даже если те были для этого отправлены сервером в ответ. И еще одна проблема в том, что нельзя поставить куки чужому домену. Таким образом нельзя "просто авторизировать пользователя на другом сайте". По сути, авторизация в любом случае сопровождается согласием на это пользователя - установкой кук. Как минимум он должен собственноручно нажать кнопочку на том же домене, на котором авторизируется, чтобы был соответствующий запрос с куками в ответе. а вот с доменами вида example.com и forum.example.com все намного проще - достаточно на первом поставить для кук домен вида ".example.com" и куки (в том числе кука с ID сессии) будут доступны и на forum.example.com. |
| Автор: Чучмек 31.7.2013, 13:09 | ||
| Надо добавлять разовый код идентификации. При авторизации на сайте А генеририруется код идентификации authorization_key. Сохранили user=>authorization_key. authorization_key добавляется к ссылке на сайт Б (или в <input type="hidden">) Сайт Б, если получает authorization_key для неавторизованного пользователя, делает запроса на А, который в свою очередь подтверждает соответствие user и authorization_key. В ответ на подтверждение, Б авторизует пользователя и аннулирует authorization_key. Добавлено через 5 минут и 26 секунд p.s.
Если так, то пользователь должен зарегистрироваться на обоих сайтах под одним логином/мылом. |
| Автор: KPEHDEL 31.7.2013, 15:04 | ||||||||
Благодарю всех за ответы. Буду думать.
Подобный алгоритм с аннулированием предполагает, что key, всегда будет разным для одно пользователя, т. к. если он всегда будет одинаковым, то в аннулировании нет смысла. Любой человек, у которого будет ссылка с этим key, сможет авторизоваться. Можно конечно создать таблицу на сервере A. В которой будет храниться сгенерированный hesh/key и соответствующее ему случайным словом, которое делает его уникальным. На сайте B при приходе запроса с ключём, находить в таблице по ключу, брать случайное слово, добавлять к остальным данным и сверять. После успешной авторизации удалять поле. Это вроде похоже на вариант, но тогда надо отбросить пункт:
Возможно так и стоит сделать.
Одних кук будет мало, если поддомен на другом сервере. Хотя можно с куками сделать примерно также, как с описанным вариантом выше. |