Могу ли я добавить что-то в пользовательский сеанс в пользовательском MembershipProvider?
-
05-07-2019 - |
Вопрос
Я реализую пользовательский MembershipProvider, чтобы передать данные для входа в пользовательский бизнес-объект, который мы используем в нескольких других местах в нашей компании. Но как только мы аутентифицировались, я бы хотел сохранить этот инициализированный бизнес-объект в сеансе, чтобы позже использовать его на других страницах. Позвольте мне привести пример.
public override bool ValidateUser(string username,string password)
{
try
{
// I want to keep this "object" in the Session to be used later on
CustomBusinessObject object = new CustomBusinessObject(username, password);
return true;
}
catch (CustomBusinessAuthenticationException)
{
return false;
}
}
Есть ли способ для меня это сделать? Я не сразу увидел способ получить доступ к объекту Session с помощью реализации этого пользовательского MembershipProvider.
Решение
Вы можете получить доступ к сеансу, вызвав System.Web.HttpContext.Current. Просто создайте пользовательское свойство в своем провайдере пользовательского членства, которое проверяет, является ли HttpContext.Current нулевым, и если да, возвращает нулевое значение, в противном случае соответственно получите доступ к значению сеанса.
public object CustomObject
{
get
{
if(System.Web.HttpContext.Current == null)
{
return null;
}
return System.Web.HttpContext.Current.Session["CustomObject"];
}
set
{
if(System.Web.HttpContext.Current != null)
{
System.Web.HttpContext.Current.Session["CustomObject"] = value;
}
}
}
Другие советы
Вы должны иметь доступ к System.Web.HttpContext.Current.Session
. Р>
Имейте в виду, что System.Web.HttpContext
будет иметь значение null
, если ваш провайдер когда-либо использовался за пределами конвейера ASP.Net, и что он используется внутри вашего провайдер, вы будете тесно связывать вашего провайдера с ASP.Net.