2013-03-27 1 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

0

Если бы я был в такой ситуации. Мне пришлось бы реорганизовать некоторый код, чтобы случайно проверять бэкэнд на повторную аутентификацию пользователя - так что, если логин был деактивирован, его поймают.

0

Вам нужно будет проверить каждый запрос на входящую страницу, чтобы узнать, был ли пользователь отключен и если они сбросили переменные сеанса. Например, вы можете написать базовый класс, который наследует класс Page и переопределяет Page_Load. Базовый класс Page_Load может выполнить проверку. Для всех страниц, которые необходимо проверить (вероятно, все страницы), они должны просто наследовать класс Base вместо класса Page.