2010-10-05 4 views
0

У меня есть сайт w1, написанный в rails с использованием auhtlogic для аутентификации и w2 в PHP (скажем), я хочу, чтобы w2 получал доступ к информации о сеансе, хранящейся в w2, и вводил пользователя в w2, а также извлекал user_id из сеанса.Как получить доступ к сеансу одного сайта с другого сайта

+0

Я думаю, вы хотите, чтобы w2 получил доступ к информации о сеансе, хранящейся в w1. – Shreyas

+0

@shreyas да! Я хочу, чтобы w2 получал доступ к информации о сеансе, хранящейся в w1 –

ответ

2

По умолчанию Rack (который Rails использует для управления своими сеансами) хранит информацию о сеансе в файлах cookie путем сортировки хэша сеанса (см. here), в результате чего получается строка, специфичная для Ruby. Было бы чрезвычайно сложно использовать PHP для десериализации этой информации.

Если вы мертвы, сделав это, вам придется обрабатывать сериализацию сеанса самостоятельно. Я думаю, что полное решение выходит за рамки одного вопроса на SO, но несколько указателей:

  • Было бы целесообразно хранить только идентификатор сессии в куки, а затем сохранить фактические данные сессии в базу данных, которая будет доступна из приложений PHP и Rails. Если вы действительно хотите сохранить информацию о сеансе в файле cookie (или в другом месте, таком как memcached, где вам также придется сериализовать его), посмотрите стратегии сериализации, которые работают на разных языках, например MessagePack.

  • Вы хотите сделать что-то, чтобы убедиться, что файл cookie не подделан пользователем. В стойке используется HMAC, что является хорошим решением. Я никогда не использовал PHP, но я уверен, что у них также есть библиотека.

  • Возможно, вы уже знаете это, но на всякий случай: все это предполагает, что ваши два приложения используют одно и то же имя домена. Если это не так, то браузеры ваших пользователей не будут делиться файлом cookie между двумя приложениями, и на самом деле вы ничего не можете сделать. Например, вы можете делиться сеансами между railsapp.yourdomain.com и phpapp.yourdomain.com, но не railsapp.com и phpapp.com.

Удачи вам!

0

Я попытался решить какое-то решение, которое было чем-то вроде взлома, но для моего предложения это сработало.

после входа в систему, я использовал для записи cookie пользователя в файл в общедоступном каталоге, и когда этот пользователь пытался получить доступ к другому серверу, на котором ему приходилось обращаться, мое приложение на этом втором сервере просто должно было «знать» как получить доступ к удаленному файлу, хранящемуся на первом сервере, и загрузить этот контент в виде файла cookie. В то время я использовал CURL.

Примечание что ввести некоторые нарушения правил безопасности, и, возможно, ваша безопасность будет опираться на «неизвестности» - например, алгоритм для монтирования имя файла, в котором хранится печенье и как получить к нему доступ и внешней конфигурации веб-сервера .. Сказал, что, я думаю, мы могли бы подумать, а также использовать общий memcached для хранения файлов cookie.

0

Считаете ли вы использование Open ID?

+0

да! но я не хочу предпочитать этот вариант –

Смежные вопросы