Это лучшее решение, которое я придумал до сих пор, но я открыт для чего-то лучшего. По сути, у меня есть 15-минутный таймер JavaScript, который сбрасывается при каждой обратной передаче. Недостатком этого подхода является то, что вторая вкладка или окно, открытое в фоновом режиме, приведет к завершению сеанса, даже если пользователь активно использует приложение в другом окне браузера.
Нечто похожее на это живет на моей главной странице. В последней строке JavaScript добавлена функция сброса, которая запускается при обновлении любой панели обновления:
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">
<Scripts >
<asp:ScriptReference Path="~/scripts/jquery/jquery-1.3.2.min.js" />
</Scripts>
</asp:ScriptManager>
<script type="text/javascript">
var redirectTimer = setTimeout('redirectToLogout()', 900000);
function redirectToLogout() {
window.location = "/logout.aspx";
}
function ResetTimeoutTimer() {
clearTimeout(redirectTimer);
redirectTimer = setTimeout('redirectToLogout()', 900000);
}
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(ResetTimeoutTimer);
</script>