ASP.NET имеет событие Session_OnEnd
, которое можно зарегистрировать в Global.asax, но даже тогда оно было крайне ненадежным: его можно было использовать только с внутрипроцессными сессиями, и оно могло отслеживать только время истечения сеанса, а не когда пользователь делает что-то вроде закрытия окна браузера.
В ASP.NET Core нет ничего похожего, в основном потому, что это не имеет смысла. Больше всего ASP.NET Core предназначен для масштабирования, что-то in-proc что-либо является полной противоположностью. Хранилище сессий распространяется по умолчанию. Даже когда вы используете сеансы в памяти, он все еще использует реализацию IDistributedCache
. Распределенное хранилище сеансов делает мониторинг истечения срока действия невозможным, поэтому такая функциональность не была добавлена.
Более того, сеансы не истекли активно. Вместо этого, когда пользователь в следующий раз отправляет обратно cookie сеанса, после того как сеанс истекает, сеанс уничтожается и создается новый сеанс. Также сеансы используют скользящие истечения, поэтому, пока пользователь остается активным в пределах окна тайм-аута, сеанс фактически никогда не истечет.
Короче говоря, то, что вы ищете, невозможно. Тем не менее, это действительно проблема крика XY. У вас есть какая-то проблема, которую вам нужно решить (X), и вы решили, что способ решить ее - это сделать что-то по истечении сеанса (Y). Тем не менее, вы не можете понять, как сделать Y, так что вы задаете вопрос о Y, когда вы действительно должны спрашивать о X. Я бы предложил создать новый вопрос о фактическом проблема, которую нужно решить; вероятно, есть лучший способ.