Могу ли я добавить что-то в пользовательский сеанс в пользовательском MembershipProvider?

StackOverflow https://stackoverflow.com/questions/1004862

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top