Я работаю над веб-сайтом, работающим на коде .NET asp/C#. Клиенты требуют, чтобы сеансы имели 25-минутный тайм-аут. Однако иногда сайт используется, и пользователь остается на связи в течение длительного периода времени (более 25 минут). Session_End срабатывает:
protected void Session_End(Object sender, EventArgs e)
{
Hashtable trackingInformaiton = (Hashtable)Application["trackingInformation"];
trackingInformaiton.Remove(Session["trackingID"]);
}
Через некоторое время пользователь возвращается, но когда он взаимодействует с веб-сайтом, он получает сообщение об ошибке, и мы получаем это уведомление по электронной почте:
Пользователь: неавторизованный пользователь
Ошибка: System.Web.HttpException
Описание: Не удалось загрузить состояние просмотра. Дерево элементов управления, в которое загружается состояние представления, должно соответствовать дереву элементов управления, которое использовалось для сохранения состояния представления во время предыдущего запроса...
Важная часть трассировки стека — System.Web.UI.Control.AddedControl. Судя по всему, сервер выбросил данные сессии и отправляет новые данные, а клиент пытается разобраться со старыми данными. Отсюда и ошибка, что "the control tree into which viewstate is being loaded [doesn't] match the control tree that was used to save the viewstate during the prevoius request."
Итак, вот вопрос. Как я могу принудительно указать браузеру пользователя перенаправлять на экран, когда вы вышли из системы, когда время ожидания соединения истекло? (Это что-то, что я должен добавить в метод Session_End?)