.NET IHttpHandlers - разные сеансы в каждом запросе AJAX

Я пишу приложение jQuery Mobile, которое выполняет несколько запросов AJAX к нескольким различным IHttpHandler классам на моем сервере. Все обработчики возвращают JSON или JSONP и включают context.Session.SessionID в JSON для целей отладки. Я делаю один запрос к первому обработчику и возвращаю идентификатор сеанса "2jysbehwyxlne0knatltcb2z". Я делаю еще один запрос к другому обработчику и возвращаю идентификатор сеанса «qy3v251fxrxesbgqeobqvaza». Это в пределах нескольких секунд друг от друга. Что здесь происходит? Я ожидаю, что идентификатор сеанса будет таким же, пока сеанс не истечет по прошествии длительного времени.

Когда я открываю запросы на их собственных вкладках, а не через AJAX на той же вкладке, я возвращаю тот же идентификатор сеанса. Итак, для моего запроса на аутентификацию, а затем для моего другого запроса на получение данных, когда эти запросы выполняются как запросы AJAX на странице, идентификаторы сеанса разные. Когда я просматриваю вкладку «Сеть» в консоли Chrome и щелкаю правой кнопкой мыши «Открыть ссылку в новой вкладке», каждый из запросов работает, как ожидалось, с тем же идентификатором сеанса.

Я запускаю приложение jQuery Mobile на http://localhost и делаю запросы обработчикам на https://localhost, если это важно. Все мои обработчики реализуют IRequiresSessionState. Этот вопрос выглядит так же, как мой, и его единственный ответ - реализовать IRequiresSessionState, который Я уже делаю.

Изменить: это вопрос может быть связан, но я наблюдаю такое поведение в Chrome.

Изменить: я использую функцию jQuery getJSON для выполнения запроса AJAX. Этот вопрос о getJSON и файлах cookie может быть актуальным.


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


Ответы (1)


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

person Sarah Vessels    schedule 26.06.2012
comment
Я не сталкивался с проблемой getJSON. Браузеры также отправляют файлы cookie с этими запросами ajax. - person nunespascal; 27.06.2012