Asp.net, где хранить имя пользователя вошедшего в систему пользователя? - PullRequest
3 голосов
/ 29 сентября 2010

Когда пользователь заходит на мой сайт asp.net, я использую следующий код:

FormsAuthentication.RedirectFromLoginPage(userid, false);

Поскольку мне часто нужно использовать идентификатор пользователя, я могу позже получить идентификатор пользователя по:

string userid = System.Web.HttpContext.Current.User.Identity.Name;

Теперь я также хочу показать имя пользователя, вошедшего в систему, на каждой странице, и поэтому у меня возникает вопрос, где лучше всего разместить имя пользователя, если мне нужно использовать его на каждой странице. User.Identity.Name уже занято идентификатором пользователя, поэтому я не могу его использовать. Другим решением было бы получить имя пользователя из базы данных на каждой странице, но это кажется плохим решением.

Итак: это лучший способ использовать сеансы для хранения имени пользователя?

Ответы [ 4 ]

5 голосов
/ 29 сентября 2010

Существуют 6 различных способов хранения информации, каждый из которых имеет свои преимущества и недостатки.

  1. Переменные членов класса.Они хороши только для срока обновления одной страницы.
  2. Переменные HttpContext.Как и переменные членов класса, только для обновления одной страницы.
  3. ViewState, они передаются от страницы к странице для сохранения состояния, но увеличивают размер загружаемых данных.Кроме того, не подходит для конфиденциальной информации, поскольку она может быть декодирована.
  4. Печенье.Отправляется на каждой странице запроса.Также не подходит для конфиденциальной информации, даже в зашифрованном виде.
  5. Сессия.Не передается конечному пользователю, поэтому хорош для конфиденциальной информации, но увеличивает использование ресурсов страницы, поэтому важно минимизировать использование занятых сайтов.
  6. Аутентификационные cookie-данные пользователя - это похоже на cookie-файлы, номожет быть декодирован с данными аутентификации и использован для создания собственного провайдера IIdentity, который реализует желаемую вами информацию об идентичности, такую ​​как имя или другую информацию профиля.Размер ограничен, однако.
1 голос
/ 29 сентября 2010
public string currentUser
{
    get { return Session["currentUser"] as string; }
    private set { Session["currentUser"] = value; }
}
1 голос
/ 29 сентября 2010

Вы можете хранить что угодно в SessionState в asp.net.Просто будьте осторожны и храните нужные вещи в нужных местах (вы также можете использовать ViewState для хранения переменных.

Проверьте это , как использовать SessionState для храненияи извлекать переменные в постбэках.

0 голосов
/ 29 сентября 2010

Использование сессий не является плохой идеей, но обязательно проверяйте NULL при получении значений, когда время сеансов истекло.

Или вы можете передать переменную в URL, например,

/Set
Response.Redirect("Webform2.aspx?Username=" + this.txtUsername.Text);

/Read
this.txtBox1.Text = Request.QueryString["Username"];
...