Как извличате бисквитката JSESSIONID от XHR заявка в Dojo?

Използвам Dojo, за да правя XHR заявки към Java Servlet и не мога да разбера как да върна стойността на бисквитката JESSIONID в заглавката на отговора.

Имам нужда от идентификатора на сесията, за да мога да го използвам в друго уеб приложение (Flex), чиито заявки трябва да използват същата HttpSession (в рамките на сървлета), както за първоначалните заявки за уеб страници.

Моят сервлет контейнер е Tomcat7 и вече конфигурирах config.xml на моето webApp с настройката useHttpOnly="false", така че бисквитката да е налична. Въпреки това просто не мога да разбера как да го извлека, dojo/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), тогава мисля, че сесийните бисквитки са единствената останала опция за поддържане на сесията. Приложението трябва да се използва в интранет, така че се надявам рискът да е минимален.   -  person greenkarmic    schedule 11.10.2013


Отговори (1)


Защо мислите, че трябва сами да получите достъп до бисквитката? Браузърът отговаря за автоматичното обработване на бисквитките. От спецификацията:

Ако потребителският агент поддържа HTTP State Management, той трябва да продължава, да отхвърля и изпраща бисквитки (както е получено в заглавката на отговора Set-Cookie и изпратено в заглавката на бисквитката), както е приложимо.

Освен това е забранено да се опитвате да изтеглите заглавката Set-Cookie на отговор на XHR заявка.

Накратко: Не можете да правите това, което правите, и не трябва да го правите. Flash използва бисквитките от браузъра, когато прави заявки, стига той е правилно конфигуриран. Така че, ако приемем, че XHR първо задава бисквитката, Flash също трябва да я изпрати.

person C Snover    schedule 12.10.2013
comment
Наистина, след няколко дни и допълнително четене разбирам тези концепции много по-добре. Причината, поради която исках да направя това, е, че първоначалната ми уеб страница правеше първоначалната ajax заявка към сървлета, в който момент беше създадена сесията. Но след това, след като по-късно заредих отделно приложение Flex, исках да продължа да използвам същата сесия, исках да кажа на приложението Flex идентификатора на сесията, така че да може да използва същата сесия на сървлета като първоначалната уеб страница. Както и да е, ударих повече препятствия с помощта на бисквитки. Ето какво направих вместо това. - person greenkarmic; 17.10.2013
comment
1) деактивирайте сесийните бисквитки в сервлета 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