передавать значения или данные с одной страницы на другую при использовании элемента управления входом в ASP.NET 2.0 - PullRequest
0 голосов
/ 06 марта 2009

Я использую Login Control, доступный в ASP.NET 2.0 на странице входа. Как только пользователь успешно прошел аутентификацию в базе данных, я перенаправляю его на home.aspx. Здесь я хочу передать имя пользователя и home.aspx, чтобы его встретили с именем в home.aspx. Пример: Добро пожаловать Смит

Я извлекаю имя пользователя из таблицы пользователей в моей базе данных во время проверки учетных данных для входа.

Может кто-нибудь сказать мне, как сделать это безопасным способом (может быть, не безопасным, но немного)?

Спасибо,

Ответы [ 4 ]

3 голосов
/ 06 марта 2009

Одно хорошее место для такого рода данных будет в сессии. Попробуйте что-то вроде этого на первой странице:

this.Session["UserName"] = userName;

и затем последующие страницы в этом сеансе для этого пользователя могут получить доступ к this.Session["UserName"].

Лучше всего создать статический класс для управления Session для вас следующим образом:

using System;
using System.Web;

static class SessionManager
{
    public static String UserName
    {
        get
        {
            return HttpContext.Current.Session["UserName"].ToString();
        }
        set
        {
            HttpContext.Current.Session["UserName"] = value;
        }
    }

        // add other properties as needed
}

Тогда ваше приложение может получить доступ к состоянию сеанса следующим образом:

SessionManager.UserName

Это даст вам максимальную гибкость и масштабируемость в будущем.

1 голос
/ 06 марта 2009

Как сказал ScottS , если вы используете стандартные элементы управления входом в систему и поставщик членства, эта информация уже доступна вам в User.Identity.Name.

Единственная причина, по которой я публикую ответ, это упоминание элемента управления LoginName , который вы можете перетащить на страницу / главную страницу и сделать это автоматически:

<asp:LoginName id="LoginName1" runat="server" FormatString ="Welcome, {0}" />

Это выдаст "Welcome, Zhaph", когда пользователь вошел в систему, или ничего, если они не вошли.

Вы также можете прекрасно сочетать это с LoginView и LoginStatus элементами управления:

<asp:LoginView ID="RegisterLink" runat="server">
  <AnonymousTemplate>
    <div class="titleRegistration">
      <a href="/Users/Register.aspx">Register</a> or 
    </div>
  </AnonymousTemplate>
  <LoggedInTemplate>
    <div class="titleRegistration">
      Welcome back
        <asp:LoginName ID="LoginName1" runat="server" /> -
    </div>
  </LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="lsGeneral" runat="server"
  LogoutPageUrl="/Users/Logout.aspx" />

Эта комбинация элементов управления будет выполнять следующие действия:

  1. Если пользователь не вошел в систему на дисплее: зарегистрируйтесь или войдите
  2. Если пользователь вошел в систему на дисплее: Welcome back Zhaph - Logout

Ссылки входа в систему заполняются настройками в файле web.config и генерируются элементом управления LoginStatus.

1 голос
/ 06 марта 2009

Если вы используете стандартную аутентификацию asp.net, вы сможете получить доступ к имени пользователя через свойство User объекта страницы.

User.Identity.Name

Как предположил Эндрю, Session - это обычное место для размещения имени пользователя, хотя я вообще избегаю использовать session, если возможно.

Вы можете установить cookie с именем пользователя.

Вы также можете установить свойство DestinationPageUrl элемента управления для входа, чтобы включить имя пользователя в строку запроса. Хотя это выглядит / выглядит довольно хромым.

0 голосов
/ 06 марта 2009

да, как сказал Эндрю, сессия является основным местом для хранения конфиденциальных данных.

но почему имя пользователя чувствительно? Вы можете сохранить его в файле cookie и распечатать его в своем home.aspx всякий раз, когда пользователь входит.

РЕДАКТИРОВАТЬ: Вы можете использовать куки в ASP.NET так:

// Setting cookie : 
Response.Cookies["UserName"].Value = "Erhan";
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(7); // Persists 1 week

// Getting cookie : 
string username = string.Empty;
if(Request.Cookies["UserName"] != null)
{
    username = Server.HtmlEncode(Request.Cookies["UserName"].Value);
}

ПРИМЕЧАНИЕ: Файлы cookie хранятся на компьютере клиента. поэтому вы не должны использовать их для хранения конфиденциальных данных.

...