5

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

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

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

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

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

4

5 回答 5

10

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

于 2012-08-13T08:46:20.120 回答
5

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

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

public interface ILoginDataService
{
   LoginData Current { get; }
}

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

于 2012-08-13T08:57:13.447 回答
3

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

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

    return entity;
}
于 2013-04-04T19:31:47.923 回答
0

using System.Web;

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

于 2020-05-06T03:39:47.610 回答
0

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

于 2020-01-14T08:53:17.280 回答