2010-10-06 2 views
1

У меня есть обработчик, как это, используя IRequiresSessionState:Handler с 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 минут после последней загрузки полной страницы.

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

Любые предложения?

ответ

0

Наконец-то получил решение этого ... своего рода.

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

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

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