Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新会话值_C#_Asp.net_Session Variables_Session State - Fatal编程技术网

C# 更新会话值

C# 更新会话值,c#,asp.net,session-variables,session-state,C#,Asp.net,Session Variables,Session State,我在登录时创建了一个会话,在该会话中我放置了user对象 public sealed class MyContext { [ThreadStatic] private static MyContext staticContext = null; public HttpContext Context { get { return HttpContext.Current; } }

我在登录时创建了一个会话,在该会话中我放置了user对象

public sealed class MyContext
{

    [ThreadStatic]
    private static MyContext staticContext = null;
    public HttpContext Context
    {
        get
        {
            return HttpContext.Current;
        }
    }


    private MyContext()
    {

    }

    public static MyContext Current
    {
        get
        {
            MyContext myContext = null;
            HttpContext context = HttpContext.Current;
            if (context != null)
            {

                //it in the Items collection (a per request store)
                if (context.Items.Contains("CONTEXT_KEY"))
                    myContext = context.Items["CONTEXT_KEY"] as MyContext;
                else
                {
                    myContext = new MyContext();
                    myContext.Context.Items["CONTEXT_KEY"] = myContext;
                }
            }
            else if (staticContext != null)
            {
                myContext = staticContext;
            }
            else
            {
                //create a new instance of static context as there is no web request
                staticContext = new MyContext();
                myContext = staticContext;
            }
            return myContext;
        }
    }

    public MyUser User
    {
        get
        {
            MyUser user = null;
            if (Current.Context.Session["LoggedInUser"] != null)
                user = (MyUser)Current.Context.Session["LoggedInUser"];
            else
            {
                user = UserDetail.GetUser(HttpContext.Current.User.Identity.Name);
                if (user == null)
                {
                    //if there is no userID, create anonymous user
                    user = new MyUser();
                    user.IsAnonymous = true;
                    user.UserID = 0;
                }
                //cache in session
                Current.Context.Session["User"] = user;
            }
            return user;
        }
        set
        {
            Current.Context.Session["User"] = value;
        }
    }


}//end class
现在我在整个应用程序中使用这个上下文,我面临一个问题,在一个情况下,如果用户登录,同时管理员停用该用户,我无法停止用户活动,这是因为用户的信息正在会话中。
因此,请建议我在管理员停用该用户时如何更新该用户的信息。

如果我很理解您的问题,您只能创建一个事件!当管理员停用一个用户时,它可能会生成一个事件,您的用户会话将立即响应该事件。
这只是一个想法,我不习惯

如果我处于那种情况。我必须重构一些代码,偶尔检查后端以重新验证用户身份——这样,如果登录被取消激活,它就会被捕获

您需要检查每个传入页面请求,以查看用户是否已停用,如果已停用,则重置会话变量。例如,您可以编写一个基类,继承Page类并重写Page\u加载。基类页面加载可以执行检查。对于所有需要检查的页面(可能是所有页面),它们应该简单地继承基类而不是Page类。

@其他:我也这么认为,但不知道如何更新特定用户的信息。