在类库中访问会话。

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

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

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

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

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

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

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

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

 public interface ILoginDataService { LoginData Current { get; } } 

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

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

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