Сохранение сеансов при использовании нескольких доменных имен для одного приложения Rails - PullRequest
1 голос
/ 27 января 2009

У меня есть одно приложение Rails 2.2.2, которое я хочу «поделиться» с несколькими клиентами. Каждый клиент имеет свое собственное доменное имя и базу данных. Цель состоит в том, чтобы одно приложение Rails могло «размещать» множество веб-сайтов.

Я использую Apache в качестве внешнего интерфейса для кластера mongrel, как веб-сервер. Чтобы позволить Rails знать, какой запрос для какого клиента, Apache добавляет заголовок client_id к каждому запросу. Rails использует этот 'client_id', чтобы выбрать правильную базу данных.

Это прекрасно работает, если я обращаюсь к нему только с одного доменного имени одновременно. Скажите «example1.com».

Он даже отлично работает - в основном - когда многие пользователи обращаются к приложению с нескольких доменных имен одновременно.

Единственная проблема, с которой я столкнулся, заключается в том, что когда два пользователя одновременно получают доступ к приложению с двух доменных имен, тогда cookie-файлы сбрасываются неожиданным образом .

Проблема проиллюстрирована в следующем фрагменте журнала:

Первый запрос от пользователя 1, вошедшего в example1.com.

Второй запрос от пользователя 2, для домашней страницы example2.com.

Третий запрос от пользователя 1, для другой страницы в приложении. Предположительно, в запрос был включен оригинальный файл cookie. Вопрос в том, почему Rails отправил назад другой файл cookie ???

Обратите внимание, что, в отличие от нескольких других вопросов, Я не пытаюсь использовать один и тот же файл cookie для нескольких доменов. Пользователь 1 и пользователь 2 в приведенном выше примере обращаются к различным доменам.

- Джон

**1st Request from USER 1 for example1.com**
    Processing Admin::CmsController#index (for 75.127.142.66 at 2009-01-27 13:15:27) [GET]
      Session ID: 00b9cfb6fd397e5c9934ea58eaef648d
    >>> Request for client 90873721, EXAMPLE1.COM
    Rendering template within layouts/admin/standard
    Rendering admin/cms/list
    Completed in 114ms (View: 14, DB: 81) | 200 OK [https://example1.com/admin/cms]

**2nd Request from User 2 for example2.com**    
    Processing CmsController#cms_show (for 64.1.215.163 at 2009-01-27 13:16:15) [GET]
      Session ID: 4fed1c59001f7484a63fb6280376825a
      Parameters: {"alias"=>"home.html"}
    >>> Request for client 48218343, EXAMPLE2.COM
    ### alias: home.html
    Rendering template within layouts/two-column
    Rendering cms/cms_show
    Completed in 23ms (View: 13, DB: 3) | 200 OK [http://example2.com/]

**3rd Request from User 1 for example1.com -- note session ID changes!!!**    
    Processing Admin::CmsController#index (for 75.127.142.66 at 2009-01-27 13:16:18) [GET]
      Session ID: 85c178aa70ed2bef6a767e844bf6c6d6
    >>> Request for client 90873721, EXAMPLE1.COM
    ####### 'admin/cms', 'index'
    Redirected to actionsignincontroller/admin/user
    Filter chain halted as [:check_authentication] rendered_or_redirected.
    Completed in 4ms | 302 Found [https://example1.com/admin/cms]

**4th request -- redirected from 3rd request**    
    Processing Admin::UserController#signin (for 75.127.142.66 at 2009-01-27 13:16:18) [GET]
      Session ID: 85c178aa70ed2bef6a767e844bf6c6d6
    >>> Request for client 90873721, EXAMPLE1.COM
    Rendering template within layouts/admin/standard
    Rendering admin/user/signin
    Completed in 10ms (View: 6, DB: 0) | 200 OK [https://example1.com/admin/user/signin]

Ответы [ 3 ]

1 голос
/ 28 января 2009

Что ж, я «решил» проблему, удалив общий mongrel_cluster и предоставив каждому домену свой экземпляр mongrel.

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

Кстати, я нашел частичное решение в «Рецептах Advanced Rails» 83, «Дайте пользователям свой собственный поддомен». В рецепте также объясняется, как дать пользователям собственные доменные имена, но в нем используется иной подход, чем тот, который я пробовал.

0 голосов
/ 27 января 2009

Я не пытаюсь отслеживать пользователей в разных доменах. Фактически, если один пользователь имеет два открытых браузера и использует два домена одновременно, то у него есть два разных сеансовых куки-файла, по одному для каждого домена.

0 голосов
/ 27 января 2009

Файлы cookie зависят от домена, поэтому вы должны использовать другую технику - один сервер, который создает файлы cookie / создает сеансы. Проверять, выписываться Отслеживание междоменных пользователей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...