2012-03-22 2 views
1

На моем сайте, когда пользователь входит создать объект сессии со следующими свойствамиДолжен ли я хранить данные пользователя в сеансе или использовать собственный поставщик профилей?

DisplayName, 
Email, 
MemberId 

Вопросы

  1. Будет ли это сделать больше смысла использовать поставщика пользовательских профилей для хранения пользователю данные ?
  2. Что такое pro и con для каждого подхода (Session and custom profile provider)?
  3. Имеет ли смысл использовать пользовательский поставщик для данных только для чтения, которые могут поступать из одной или нескольких таблиц?
+0

Я не понимаю ваш вопрос: сеанс истекает, когда пользователь отказывается или простаивает 20 минут. Если вам нужны постоянные данные, вы можете использовать профиль .Net, который хранит эту информацию в базе данных. – enricoariel

+0

Я не уверен, что вы не понимаете – chobo

ответ

2

Мой ответ - не прямой подход к вашему вопросу. Это просто альтернативный подход.

Вместо настраиваемого поставщика профилей я создаю собственный контекст, чтобы отслеживать текущий профиль пользователя. Вот пример кода. Вы можете хранить DisplayName, Email, MemberId вместо класса MyUser.

void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 
    if (HttpContext.Current.User != null && 
     HttpContext.Current.User.Identity.IsAuthenticated) 
    { 
     MyContext.Current.MyUser = YOURCODE.GetUserByUsername(HttpContext.Current.User.Identity.Name); 
    } 
} 

public class MyContext 
{ 
    private MyUser _myUser; 

    public static MyContext Current 
    { 
     get 
     { 
      if (HttpContext.Current.Items["MyContext"] == null) 
      { 
       MyContext context = new MyContext(); 
       HttpContext.Current.Items.Add("MyContext", context); 
       return context; 
      } 
      return (MyContext) HttpContext.Current.Items["MyContext"]; 
     } 
     } 

     public MyUser MyUser 
     { 

      get { return _myUser; } 
      set { _myUser = value; } 
     } 
    } 
}