ASP.Net MVC Core - работа с несколькими объектами сеансов (не объектами в сеансах, а самими сеансами) - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующие потребности:

Я хотел бы иметь возможность применить модификацию к объекту 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.

Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...