Нет события на стороне сервера, которое возникает, когда страница оставлена / закрыта. Также событие Session_End (упомянутое в других ответах) не вызывается при оставлении страницы, поскольку пользователь может перейти к другим страницам того же веб-приложения (и, следовательно, сеанс будет продолжать существовать).
Я могу придумать 3 возможных способа решения (или обхода) этой проблемы:
1 - используйте ViewState для хранения данных с областью страницы. Это то, для чего предназначен ViewState, и если у вас много данных, это не должно быть проблемой. Если у вас много данных, помните, что они будут сериализованы / десериализованы и отправлены клиенту / обратно на сервер для каждого запроса (что может привести к большим запросам и, следовательно, к снижению производительности).
2 - вместо помещения данных в сеанс поместите их в кэш (с малым временем ожидания истечения скольжения). На вашей странице вы можете получить доступ к своим данным так же, как и из сеанса, то есть data = Cache ["data"], но вы должны быть готовы к тому, что данные были удалены из Cache (вам необходимо повторно загрузить их например, из БД), если время между двумя запросами было больше времени истечения.
3 - используйте событие на стороне клиента (javascript) onUnload и инициируйте некоторое действие (например, обратный вызов ajax) для удаления данных из сессия. Но я думаю, что событие onUnload не является надежным (оно не будет запущено ни в коем случае, например, когда браузер завершит работу в результате сбоя или с помощью диспетчера задач, или если javascript отключен).