Обработчик с IRequiresSessionState не продлевает тайм-аут сеанса

У меня есть такой обработчик, использующий IRequiresSessionState:

public class MyHandler : IHttpHandler, IRequiresSessionState
{
  // code
}

В коде я могу читать и устанавливать значения сеанса. Я также проверяю, что звонящий вошел в систему. Все работает нормально.

На веб-сайте используется проверка подлинности с помощью форм, поэтому в файле web.config у меня есть следующее:

<authentication mode="Forms">
   <forms loginUrl="Login.aspx" timeout="10" slidingExpiration="true"></forms>
</authentication>

Проблема в том, что вызовы AJAX от клиента к коду сервера MyHandler не продлевают срок службы сеанса!

Таким образом, даже если пользователь занят отправкой и получением данных с сервера, время ожидания истекает через 10 минут после последней полной загрузки страницы.

В обработчике я попытался специально изменить значение сеанса при каждом вызове, но даже это не увеличивает время ожидания.

Какие-либо предложения?


person Glen Little    schedule 06.10.2010    source источник


Ответы (1)


Наконец-то нашлось решение этой ... вроде того.

Я отказался от попыток заставить обработчик выполнить эту работу и вместо этого вызвал обычную страницу ASPX. На этой странице я удалил HTML-код и использовал Response.Write (...), чтобы отправить обратно некоторый JSON, который мне нужен. Однако даже при этом моя сессия не продлевалась!

Я наконец понял, что в событии PreRender я использовал Response.ClearHeaders(). Вот в чем проблема. Оказывается, система проверки подлинности с помощью форм обновляла cookie билета сеанса при необходимости, но добавляла его в заголовки до того, как мой код был запущен. Поэтому, когда я очищал заголовки, я стирал новый файл cookie перед его отправкой в ​​браузер.

Итак, если у вас возникли проблемы с сессиями, которые не расширяются, убедитесь, что ваш код не использует ClearHeaders()!

person Glen Little    schedule 19.10.2010