Один и тот же сеанс и идентификатор сеанса для разных поддоменов в проекте Grails - как я могу это сделать? - PullRequest
1 голос
/ 27 марта 2012

В настоящее время я работаю над проектом, который поддерживает несколько языков. Для того, чтобы быть SEO дружественным, я пытаюсь перенаправить субдомены пользователей, соответствующие их языку (или их предпочтительный язык).

Т.е., URL моих проектов mydomain.com , и я работаю с поддоменами en.mydomain.com , es.mydomain.com , de.mydomain.com , fr.mydomain.com ... вы поняли идею. На данный момент все субдомены обслуживаются одним приложением Grails.

Что происходит, так это то, что мой проект grails поддерживает разные сеансы (как видно по идентификаторам сеансов) для каждого отдельного субдомена, поэтому информация теряется, когда пользователь переключается между языками. Я этого не предвидел. (

Как я могу явно установить идентификатор сеанса? Я хотел бы, чтобы он основывался только на mydomain.com .

Я понял, что Apache Tomcat предлагает что-то вроде

<Context sessionCookiePath="/" sessionCookieDomain=".mydomain.com"> 

, но это не помогает для среды разработки и т. Д.

Есть намеки? Вы пытались сохранить информацию о сеансе в БД? Иногда это используется в целях балансировки нагрузки и может помочь и здесь?!

Помощь высоко ценится (как всегда)! Ура!

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Один из способов решения этой проблемы - использовать nginx в качестве обратного прокси-сервера перед вашим котом и переводить запросы с fr.mydomain.com на localhost/yourapplication/fr/ или что-то еще.

Он позаботится о ваших печеньках.Я добавил пример конфигурации (слегка укороченный), который я использовал один раз:

server {
    server_name  fr.yourdomain.com;
    location /office {
        proxy_pass        http://localhost:8080/yourapplication/fr;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
    }
}

server {
   server_name  es.yourdomain.com;
    location /office {
        proxy_pass        http://localhost:8080/yourapplication/es;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
    }
}
[..]
0 голосов
/ 27 марта 2012

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

У вас есть несколько вариантов здесь:

  1. Задайте вопрос, относящийся к правилам перезаписи URL apache, если они могут сохранить сеанс http через перезапись URL.

  2. отказаться от использования субдомена и использовать локаль браузера, чтобы выяснить, какие пакеты сообщений использовать.(мне нравится этот подход)

  3. (раньше было 2 :)) изучить вопрос размещения информации о сеансе в файлах cookie, которые доступны для чтения по всему домену.я знаю, что междоменные куки не разрешены, но поддомен должен быть в порядке.

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