Как извлечь файл cookie JSESSIONID из запроса XHR в Dojo?

Я использую Dojo для выполнения запросов XHR к сервлету Java, и я не могу понять, как получить значение cookie JESSIONID, возвращенное мне в заголовке ответа.

Мне нужен идентификатор сеанса, чтобы я мог использовать его в другом веб-приложении (Flex), запросы которого должны использовать тот же HttpSession (внутри сервлета), что и для начальных запросов веб-страницы.

Мой контейнер сервлета - Tomcat7, и я уже настроил config.xml своего webApp с параметром useHttpOnly = "false", чтобы файл cookie был доступен. Однако я просто не могу понять, как его извлечь, dojo / cookie предоставляет мне файлы cookie только для текущей страницы, а не только что сделанный мной HTTP-запрос.

Спасибо.


person greenkarmic    schedule 11.10.2013    source источник
comment
Если для идентификатора сеанса установлено значение http only, вы не сможете его извлечь. Кстати: вы не хотите делать это из-за проблем с безопасностью перехвата сеанса ...   -  person home    schedule 11.10.2013
comment
Я знаю, я задал этот вопрос вчера, и если я не использую SSL, я не верю, что у меня есть выбор, поскольку мои запросы возвращают только содержимое JSON, и поэтому я не могу использовать перезапись URL. Поэтому, если я не могу использовать перезапись URL и не могу использовать SSL (мы не используем HTTPS), то я думаю, что файлы cookie сеанса - единственный оставшийся вариант для поддержания сеанса. Приложение предназначено для использования в интрасети, поэтому я надеюсь, что риск минимален.   -  person greenkarmic    schedule 11.10.2013


Ответы (1)


Как вы думаете, почему вам нужно получить доступ к куки-файлу самостоятельно? Браузер отвечает за автоматическую обработку файлов cookie. Из спецификации:

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

Кроме того, запрещено пытаться получить заголовок Set-Cookie ответа на запрос XHR.

Вкратце: вы не можете делать то, что делаете, и не должны этого делать. Flash использует файлы cookie из браузера при выполнении запросов, если он правильно настроен. Итак, если XHR устанавливает файл cookie первым, Flash также должен его отправить.

person C Snover    schedule 12.10.2013
comment
Действительно, после нескольких дней и дальнейшего чтения я намного лучше понимаю эти концепции. Причина, по которой я хотел это сделать, заключается в том, что моя первоначальная веб-страница выполняла начальный запрос ajax сервлету, после чего был создан сеанс. Но затем, после более поздней загрузки отдельного приложения Flex, я хотел продолжать использовать этот же сеанс, я хотел сообщить приложению Flex идентификатор сеанса, чтобы оно могло использовать тот же сеанс сервлета, что и исходная веб-страница. Как бы то ни было, я сталкиваюсь с большим количеством препятствий, используя файлы cookie. Вот что я сделал вместо этого. - person greenkarmic; 17.10.2013
comment
1) деактивировать файлы cookie сеанса в сервлете config.xml 2) Вручную вернуть идентификатор сеанса на исходную веб-страницу в ответе JSON на первый запрос. 3) Загрузите приложение Flex в iframe на странице, включая jsessionid в качестве параметра строки запроса в URL-адресе приложения Flex. 4) В приложении Flex добавьте; jessionid = 123 ... к URL-адресу для всех запросов к сервлету. 5) Если сервлет не распознает идентификатор сеанса, он сообщает об этом приложению Flex, которое затем возвращает пользователя на исходную веб-страницу с помощью navigateToURL (myURL, _top); - person greenkarmic; 17.10.2013