Небольшая заметка на будущее. Не является чем-то новым или неожиданным, но порой бывает очень сложно понять причину, из-за которой возникают такие ошибки - поэтому решил опубликовать.
Итак...смеркалось)
В работе над одним из проектов я столкнулся со странной ошибкой - если пользователь входил на сайт по своему openid, то после входа он иногда перенаправлялся не на ту страницу, с которой входил. Баг воспроизводился ну очень бессистемно, но довольно часто - особенно у тестеров и менеджеров (ну еще бы)).
Выяснилось, что проблема заключалась в сбросе данных, которые сохранялись в сессии - именно в ней сохранялся return url, а за его отсутствием переход происходил на главную. Но каким образом терялись данные сессии, если пользователь только что вошел в систему, да еще и так непредсказуемо???
Ответ был просто - по умолчанию, режим использования сессии (sessionState mode) устанавливается в InProc, т.е. в рабочем процессе ASP.NEТ , а вот что мы можем вычитать о режимах сессии в базе документов одного достаточно популярного хостинга www.1gb.ru :
Итак, картинка сложилась. Используя настройки сессии по умолчанию, мы в какой-то степени делаем себя зависимым от работы сервера, что иногда приводит к неприятным последствиям.
Итак...смеркалось)
В работе над одним из проектов я столкнулся со странной ошибкой - если пользователь входил на сайт по своему openid, то после входа он иногда перенаправлялся не на ту страницу, с которой входил. Баг воспроизводился ну очень бессистемно, но довольно часто - особенно у тестеров и менеджеров (ну еще бы)).
Выяснилось, что проблема заключалась в сбросе данных, которые сохранялись в сессии - именно в ней сохранялся return url, а за его отсутствием переход происходил на главную. Но каким образом терялись данные сессии, если пользователь только что вошел в систему, да еще и так непредсказуемо???
Ответ был просто - по умолчанию, режим использования сессии (sessionState mode) устанавливается в InProc, т.е. в рабочем процессе ASP.NEТ , а вот что мы можем вычитать о режимах сессии в базе документов одного достаточно популярного хостинга www.1gb.ru :
В рабочем процессе ASP.NET (mode="InProc")
Плюсы:
- Работает быстрее всего.
Минусы:
- Объекты не обязательно должны быть сериализуемыми.
Перезапуск рабочего процесса - обычная периодическая процедура, которая не приводит к остановке сайта или отказу в обработке запросов. Её нельзя заметить. Но, однако, помните, что переменные сессии в этот момент будут обнуляться.
- При перезапуске рабочего процесса ASP.NET / IIS6 параметры сессии теряются.
Если ваш сайт использует авторизацию через сессии или иным образом плотно зависит от сессий, этот режим работы может приводить к некорректной работе сайта.
В службе состояний (mode="StateServer")
Плюсы:
Минусы:
- Переменные сессии не сбрасываются при перезапуске рабочего процесса ASP.NET / IIS6.
Мы рекомендуем этот режим работы, т.к. в таком случае работа ваших сессий не будет зависеть от внутренних деталей работы веб-сервера.
- Объекты, размещаемые в сессиях, должны быть сериализуемыми.
Итак, картинка сложилась. Используя настройки сессии по умолчанию, мы в какой-то степени делаем себя зависимым от работы сервера, что иногда приводит к неприятным последствиям.

0коммент.:
Отправить комментарий