我正在开发一个使用2个子项目的应用程序架构: a)asp.net Web应用程序(它涵盖用户界面和业务逻辑)和 b)类库。 (它涵盖了数据访问层)
系统用户成功登录后,用户信息将存储在会话对象中。
我面临的问题是当我尝试在类库项目(数据访问层)中访问该会话对象时,它总是返回null。
我需要访问类库项目中的会话对象,因为在我的情况下,每个用户都有自己的用户名和密码用于数据库访问(出于安全原因);
那么,我如何在类库项目中读/写会话对象
答案 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();
}
}