Как получить доступ к сессии одного сайта с другого сайта - PullRequest
0 голосов
/ 05 октября 2010

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

Ответы [ 3 ]

2 голосов
/ 05 октября 2010

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

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

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

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

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

Удачи!

0 голосов
/ 05 октября 2010

Рассматривали ли вы использовать Open ID?

0 голосов
/ 05 октября 2010

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

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

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

...