我可以在自定义MembershipProvider中向用户会话添加内容吗?

时间:2009-06-17 02:47:02

标签: c# asp.net asp.net-membership

我正在实现自定义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;
    }
}

我有办法做到这一点吗?我没有立即看到通过实现这个自定义MembershipProvider来访问Session对象的方法。

2 个答案:

答案 0 :(得分:3)

您可以通过调用System.Web.HttpContext.Current来访问会话。只需在自定义成员资格提供程序上创建一个自定义属性,检查HttpContext.Current是否为null,如果是,则返回null,否则相应地访问会话值。

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

答案 1 :(得分:0)

您应该可以访问System.Web.HttpContext.Current.Session

请注意,如果您的提供商曾在ASP.Net管道之外使用过,那么System.Web.HttpContext将为null,并且通过在您的提供商中使用它,您将把您的提供商紧密地连接到ASP .NET。