ASP.Net MVC Core-处理多个会话对象(不是会话中的对象,而是会话本身)

时间:2019-07-10 13:13:21

标签: c# asp.net-mvc session asp.net-core

我有以下需求:

当发生特定事件(由应用程序的随机组件触发)时,我希望能够对应用程序的所有已连接用户的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”不能按预期运行: 如果我查看调试会发生什么,该密钥将在事件方法中的本地“ _session”对象上删除(之前存在,之后消失)。 但是,当程序的其余部分恢复运行时,密钥又回来了,就像我在会话中什么都不给。

显然,“ _ session”对象只是实际会话的某种副本,而不是对原始会话对象本身的引用。

是否有一种方法可以像我正在尝试的那样在ASP.Net Core中管理会话,或者更一般地,一种访问所有现有会话列表并更改其内容的方法? 我在MVC Core中找不到与会话管理相关的任何内容。

感谢帮助

0 个答案:

没有答案