我正在开发一个使用 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;
}
using System.Web;
namespace ClassNameSpace
{
public class Class1 : IRequiresSessionState
{
private string sessionValue => HttpContext.Current.Session["sessionKey"].ToString();
}
}
我有一个使用会话的 ASP.Net 应用程序。我可以使用 [WebMethod(EnableSession = true)] 函数在我的 app_code 文件中访问它。我不确定这是否是您的问题。当我在方法上删除 (EnableSession = true) 时,我也面临会话值为 null。