代码之家  ›  专栏  ›  技术社区  ›  Nathan Palmer

我可以在自定义成员资格提供程序中向用户会话添加一些内容吗?

  •  3
  • Nathan Palmer  · 技术社区  · 16 年前

    我正在实现一个自定义成员身份提供程序,以便将登录详细信息传递给我们在公司其他几个地方使用的自定义业务对象。但是,一旦我们进行了身份验证,我希望在会话中保存这个初始化的业务对象,以便稍后在其他页面中使用。让我举个例子。

    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;
        }
    }
    

    我有办法做到这一点吗?我没有立即看到通过实现这个自定义成员身份提供程序来访问会话对象的方法。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Adam Carr    16 年前

    您可以通过调用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;
            }
        }
    }
    
        2
  •  0
  •   womp    16 年前

    您应该能够访问 System.Web.HttpContext.Current.Session .

    记住 System.Web.HttpContext null 如果您的提供程序曾在ASP.NET管道之外使用过,并且通过在提供程序内部使用它,您的提供程序将与ASP.NET紧密耦合。