Большинство, если это может быть обработано на стороне сервера.
Всякий раз, когда есть пользовательская активность на стороне сервера - загрузка страницы, вызов ajax, что угодно, установите переменную сеанса
Session["last_activty"]=DateTime.Now;
В ваших вызовах AJAX и загрузке страницы (это можно сделать на главной странице / вложенной главной странице для страниц, требующих аутентификации), отметьте (псевдокод)
if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
Session["logged_in"]=false;
Если загрузка страницы или метод webmethod / webservice определяют на основании вышеизложенного, что время ожидания пользователя истекло, либо
a) перенаправить на страницу входа (на стороне сервера) или
b) вернуть код состояния вашему абоненту ajax, который вызовет перенаправление или отображение диалогового окна входа в систему.
ПРИМЕЧАНИЕ : остерегайтесь использования реальных переменных сеанса, так как они имеют тенденцию работать плохо / совсем не работать в кластеризованных серверных средах. Лучшее место для вещей такого типа - в вашей базе данных.
table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.