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

Я реализую пользовательский 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.

Ответы [ 2 ]

3 голосов
/ 17 июня 2009

Вы можете получить доступ к сеансу, вызвав 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;
        }
    }
}
0 голосов
/ 17 июня 2009

Вы должны иметь доступ к System.Web.HttpContext.Current.Session.

Имейте в виду, что System.Web.HttpContext будет null, если ваш провайдер когда-либо используется вне конвейера ASP.Net, и что, используя его внутри вашего провайдера, вы будете тесно связывать вашего провайдера с ASP.Net.

...