Это старый вопрос, но у меня есть похожая проблема, и у меня была эта идея для решения.
При каждом запросе страницы, который использует сеанс, ваш сеанс обновляется.В кэш приложения поместите ключ = sessionId и значение = DateTime.Now.
Создайте веб-службу (.ashx или что-то еще), которая НЕ использует состояние сеанса, но в идеале аутентифицируется с использованием проверки подлинности с помощью форм или какой-либо другой схемы проверки подлинности.Ваш javascript, который отсчитывает время до истечения сеанса, вызовет этот веб-сервис незадолго до истечения сеанса, чтобы узнать, действительно ли истекает срок сеанса.
Я думаю, что веб-сервис должен вернуть что-то простое, например 2, если сессия истекла, 1, если сессия вот-вот истечет, или 0, если нет.Вернуть случайное значение [0,1,2], если служба вызывается пользователем с неизвестным или недействительным файлом cookie SessionId - мы надеемся, что это предотвратит обнаружение действительного sessionId злоумышленником, получившим файл cookie Forms Auth.
Iисследовал декомпиляцию встроенного SessionProvider, чтобы посмотреть, смогу ли я получить доступ к сеансу, чтобы обнаружить истечение срока действия без запуска обновления.Но это зависит от типа используемого поставщика сеансов, поэтому, если вы когда-нибудь перейдете, скажем, от поставщика сеансов SQL Server к Redis, вам придется переписать его.