2013-03-27 75 views
0

我已经在登录时创建会话,在该会话中我已经放置了用户对象。更新会话值

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 

现在我使用这样的背景下整个应用程序,我在一个案件中面临的问题,如果用户登录和同时管理员停用该用户,我无法停止用户活动,这是因为用户的信息正在开会。 所以请建议我在管理员停用该用户时如何更新特定用户的信息。

回答

0

如果我明白你的问题,你只能创建一个活动!当管理员停用用户时,它可能会生成一个事件,并且您的用户会话会立即响应。 这只是一个想法,我不习惯会话!

+0

@其他:我觉得一样,但没有任何想法如何更新特定用户的信息。 – Vijjendra 2013-03-27 18:58:43

0

如果我在那种情况。我将不得不重构一些代码来偶尔检查后端以重新验证用户身份 - 这样如果登录失效,它将被捕获。

0

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