在类库中访问会话。

时间:2012-08-13 08:43:22

标签: c# asp.net

我正在开发一个使用2个子项目的应用程序架构:    a)asp.net Web应用程序(它涵盖用户界面和业务逻辑)和    b)类库。 (它涵盖了数据访问层)

系统用户成功登录后,用户信息将存储在会话对象中。

我面临的问题是当我尝试在类库项目(数据访问层)中访问该会话对象时,它总是返回null。

我需要访问类库项目中的会话对象,因为在我的情况下,每个用户都有自己的用户名和密码用于数据库访问(出于安全原因);

那么,我如何在类库项目中读/写会话对象

5 个答案:

答案 0 :(得分:7)

使用System.Web.HttpContext.Current.Session对象。

答案 1 :(得分:5)

首先,正如Peri正确注意到的那样 - 如果为每个用户分别进行数据库登录是一个好主意,你需要再考虑一下 - 因为你松散了连接池(不同的用户将无法重用现有的连接 - 并创建新的SQL连接非常昂贵。)

如果您真的希望保留单独的数据库用户,我将创建从数据访问抽象会话的接口:

public interface ILoginDataService
{
   LoginData Current { get; }
}

实现将从会话传递登录数据。通过这种方式,您不会在数据访问逻辑中对会话具有会话依赖性 - 因此它将更易于测试,您也可以分开关注。

答案 2 :(得分:2)

以下是我在库中用来获取会话信息的代码。

public static string Entity()
{
    string entity = "";
    HttpContext httpContext = HttpContext.Current;
    if (httpContext.ApplicationInstance.Session.Count > 0)
        entity = httpContext.ApplicationInstance.Session["EntityCode"].ToString();

    return entity;
}

答案 3 :(得分:0)

我有一个使用会话的ASP.Net应用程序。我可以使用该函数的[WebMethod(EnableSession = true)]在我的app_code文件中对其进行访问。我不确定这是否是您的问题。当我在方法上删除(EnableSession = true)时,会话值也为null。

答案 4 :(得分:0)

using System.Web;

namespace ClassNameSpace
{
    public class Class1 : IRequiresSessionState
    {
            private string sessionValue => HttpContext.Current.Session["sessionKey"].ToString();
    }
}