HttpSession без cookie - PullRequest
       1

HttpSession без cookie

1 голос
/ 04 января 2012

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

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

Когда первый запрос ajax сделан (немного в потоке приложения), запрос Ajax не несет с собой cookie JSessionId (очевидно, поскольку он отправляет его на другой сервер, чем он получил)

Есть ли хороший способ найти сеанс, с которым должен взаимодействовать вызов AJAX. Я попытался установить для параметра grails.views.enable.jsessionid значение true, но это работает только в том случае, если браузер не принимает файлы cookie.

Ответы [ 2 ]

1 голос
/ 04 января 2012

Создайте скрытое входное значение формы, в котором есть jsessionid на странице, которую вы отправляете обратно на портал по первому запросу. Затем прочитайте эту переменную формы и установите cookie в коде JavaScript, который делает запрос AJAX.

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

0 голосов
/ 04 января 2012

Самый надежный способ для вас - настроить собственный файл cookie и передать его вместе с запросами.

Звучит так, как будто вы столкнулись с проблемами из-за портала и его файлов cookie, а затем вынуждены продолжить эту «сессию» на другом сервере. Ваше приложение должно просто обрабатывать свои собственные сеансы, чтобы предотвратить "нормальные" cookie-файлы.

Идея заключается в том, чтобы создать токен сеанса, когда портал отправляет запрос к вашему приложению, а затем последующие вызовы AJAX, которые ваше приложение возвращает на свой собственный сервер, должны включать этот токен. Затем вы можете легко связать этот токен с сеансом, который вам нужно использовать.

Если вы хотите сделать его немного более устойчивым и обрабатывать его выше уровня вашего приложения, вы можете использовать тот факт, что Grails построен на Spring MVC в глубине, и переопределить обработчик сеанса по умолчанию, чтобы использовать любой механизм. Вы решили пойти с. Я не уверен, как именно это сделать с Grails, но я делал аналогичные вещи в проектах Spring MVC, и это не так уж сложно, когда вы обернетесь вокруг различных точек внедрения платформы.

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

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