передавать значения или данные с одной страницы на другую при использовании элемента управления входом в ASP.NET 2.0.
-
03-07-2019 - |
Вопрос
Я использую контроль входа в систему, доступный в ASP.NET 2.0, на странице входа.После успешной аутентификации пользователя в базе данных я перенаправляю его на home.aspx.Здесь я также хочу передать имя пользователя в файл home.aspx, чтобы имя пользователя встречалось в файле home.aspx.Бывший:Добро пожаловать, Смит
Я извлекаю имя пользователя из таблицы пользователей в моей базе данных во время проверки учетных данных для входа.
Может кто-нибудь сказать мне, как это сделать безопасным способом (может быть, не безопасным, но немного)?
Спасибо,
Решение
Одно хорошее место для такого рода данных будет в сессии. Попробуйте что-нибудь подобное на первой странице:
this.Session["UserName"] = userName;
, а затем последующие страницы в этом сеансе для этого пользователя могут получить доступ к this.Session [" имя пользователя "]
.
Лучше всего создать статический класс для управления 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
Это даст вам максимальную гибкость и масштабируемость в будущем.
Другие советы
Если вы используете стандартную аутентификацию asp.net, вы сможете получить доступ к имени пользователя через свойство User объекта страницы.
Пользователь.Идентификация.Имя
Как предположил Эндрю, сеанс — это обычное место для размещения имени пользователя, хотя я вообще избегаю использования сеанса, если это возможно.
Вы можете установить файл cookie с именем пользователя.
Вы также можете установить свойство DestinationPageUrl элемента управления входом, чтобы включить имя пользователя в строку запроса.Хотя это кажется/выглядит довольно отстойно.
As ScottS сказал, что если вы используете стандартные элементы управления входом в систему и поставщик членства, эта информация уже доступна вам в User.Identity.Name.
Единственная причина, по которой я публикую ответ, - упомянуть элемент управления LoginName , который вы можете перетащить на страницу / главную страницу и сделать это автоматически для вас:
<asp:LoginName id="LoginName1" runat="server" FormatString ="Welcome, {0}" />
Это выдаст " Добро пожаловать, 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" />
Эта комбинация элементов управления будет выполнять следующие действия:
<Ол>Ссылки входа в систему заполняются настройками в файле web.config и генерируются элементом управления LoginStatus.
да, как сказал Эндрю, сессия является основным местом для хранения конфиденциальных данных.
но почему имя пользователя чувствительно? Вы можете сохранить его в файле cookie и распечатать его в своем home.aspx всякий раз, когда пользователь входит.
РЕДАКТИРОВАТЬ: Вы можете использовать файлы cookie в 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 хранятся на компьютере клиента. поэтому вы не должны использовать их для хранения конфиденциальных данных.