类库中的访问会话。

问题描述 投票:5回答:4

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

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

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

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

所以,我如何在类库项目中从会话对象读取和写入会话对象

c# asp.net
4个回答
8
投票

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


5
投票

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

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

public interface ILoginDataService
{
   LoginData Current { get; }
}

实现将通过会话传递登录数据。这样,您就不会在数据访问逻辑中拥有会话对会话的依赖关系-因此它将更具可测试性,而且您将分开关注点。


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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.