У меня есть следующие потребности:
Я хотел бы иметь возможность применить модификацию к объекту Session всех подключенных пользователей моего приложения, когда возникает конкретное событие (вызванное случайным компонентом моего приложения).
Для этого, когда пользователи входят в приложение, я подписываюсь на событие с помощью специального метода для конкретного сеанса пользователя. Поэтому я создаю экземпляр моего слушателя и вызываю метод подписки.
SecurityChangeListener securityChangeListener = new SecurityChangeListener();
securityChangeListener.SubscribeForUserSession(_httpContextAccessor.HttpContext.Session);
Где securityChangeListener - это мой класс слушателя, а класс слушателя имеет следующую реализацию:
public class SecurityChangeListener
{
private ISession _session;
public void SubscribeForUserSession(ISession session)
{
_session = session;
EventsHub.MyEvent += MyHandler;
Logger.Info("Subscribed to event for session " + _session.Id);
}
private void EventsHubOnParameterElementChanged(object sender, EntityChangeEventArgs<IParameterElement> e)
{
Logger.Info($"Executing handler for session {_session.Id}");
_session.Remove("MyKey1");
}
}
Фактический код длиннее, но я сохранил только основные выдержки.
Событие правильно подключено к слушателю, событие вызывается, как и ожидалось, для конкретного сеанса каждого из моих пользователей.
Но «Session.Remove» не работает должным образом:
Если я посмотрю в debug, что происходит, ключ удаляется (присутствует до, исчез после) в локальном объекте "_session" в методе события.
Но когда возобновляется работа остальной программы, клавиша возвращается, как будто я ничего не делаю в сеансе.
Видимо, объект "_session" - это просто некая копия фактического сеанса, а не ссылка на сам исходный объект сеанса.
Есть ли способ управления сеансами в ASP.Net Core, как я пытаюсь это сделать, или, в более общем смысле, способ получить доступ к списку всех существующих сеансов и изменить их содержимое?
Мне не удалось найти ничего связанного с управлением сеансами в MVC Core.
Спасибо за помощь