.NET IHttpHandlers - различна сесия във всяка AJAX заявка

Пиша jQuery Mobile приложение, което прави няколко AJAX заявки към няколко различни IHttpHandler класа на моя сървър. Всички манипулатори връщат JSON или JSONP и включват context.Session.SessionID в JSON за целите на отстраняване на грешки. Правя една заявка към първия манипулатор и получавам обратно ID на сесията „2jysbehwyxlne0knatltcb2z“. Правя друга заявка към различен манипулатор и получавам обратно ID на сесията „qy3v251fxrxesbgqeobqvaza“. Това е в рамките на няколко секунди едно от друго. Какво става? Очаквам идентификаторът на сесията да бъде същият, докато сесията изтече след продължително време.

Когато отворя заявките в техните собствени раздели, за разлика от чрез AJAX в същия раздел, получавам обратно същия идентификатор на сесията. Така че за моята заявка за удостоверяване и след това за другата ми заявка за извличане на данни, когато тези заявки се случват като AJAX заявки в страница, идентификаторите на сесията са различни. Когато преглеждам раздела Мрежа в конзолата на Chrome и щраквам с десния бутон върху Отваряне на връзката в нов раздел всяка от заявките, те функционират според очакванията, като имат същия идентификатор на сесия.

Изпълнявам мобилното приложение jQuery на http://localhost и правя заявки към манипулатори на https://localhost, ако това има значение. Всичките ми манипулатори изпълняват IRequiresSessionState. Този въпрос изглежда същият като моя и единственият му отговор е да се приложи IRequiresSessionState, което Вече го правя.

Редактиране: това въпрос може да е свързано, но наблюдавам това поведение в Chrome.

Редактиране: Използвам функцията getJSON на jQuery, за да направя AJAX заявката. Този въпрос относно getJSON и бисквитките може да е подходящ.


person Sarah Vessels    schedule 22.06.2012    source източник
comment
Проверихте ли дали вашите бисквитки се предават правилно? Проверете дали стойността е зададена във вашата бисквитка за сесия на asp.net   -  person nunespascal    schedule 23.06.2012
comment
Изглежда, че бисквитката се задава само когато направя обикновена HTTP заявка към манипулатора в раздел на браузъра. Виждам идентификатора на сесията в бисквитката, която беше върната в моя JSON по този начин. Когато след това се опитам да заредя страницата си, където заявката е направена чрез AJAX, идентификаторът на сесията в бисквитката остава същият, а идентификаторът на сесията, върнат чрез заявката за AJAX, е различен от този в бисквитката.   -  person Sarah Vessels    schedule 25.06.2012
comment
Бихте ли споделили своя код за повикване на ajax? А също и текущия ви домейн. Трябва да има нещо нередно там.   -  person nunespascal    schedule 26.06.2012
comment
Хм, използвам функцията getJSON на jQuery. Ще актуализирам въпроса си със свързана връзка.   -  person Sarah Vessels    schedule 26.06.2012


Отговори (1)


Мисля, че проблемът ми може да е бил, че използвах метода getJSON на jQuery за изпращане на AJAX заявката. В крайна сметка добавих <sessionState cookieless="true" /> към моя Web.config, така че сега моите манипулатори поставят S(the_session_id)) в URL адреса. Когато изпратя първата си заявка до манипулатора, съхранявам идентификатора на сесията, върнат в моя JSON в HTML 5 локално хранилище. Всички следващи заявки предавам този идентификатор на сесията в URL адреса. Това не е идеалното решение и може да проуча допълнително, за да видя дали мога отново да използвам бисквитки за моята сесия.

person Sarah Vessels    schedule 26.06.2012
comment
Не съм срещал проблем с getJSON. Браузърите също изпращат бисквитките с тези ajax заявки. - person nunespascal; 27.06.2012