如何持久化业务层可用的会话数据

本文关键字:会话 数据 持久化 业务 | 更新日期: 2023-09-27 18:03:27

我正在构建一个ASP。Net MVC 4应用程序。用户必须登录,并根据数据库检查帐户。在此数据库中,用户与一个或多个部门相关联。需求声明用户一次只能为一个部门使用应用程序。

这意味着在成功登录后,我检查该用户链接到多少部门。如果只有一个,那就是活跃部门。如果多于一个,我将要求用户从中选择一个,这个选择将是活动部门。此值必须在整个会话期间持续存在。

应用程序中有许多用例必须只允许访问属于活动部门的数据。这些限制应用于业务层,也就是说,一个不知道ASP的c#类库。净上下文。

如何最好地保存用户对活动部门的选择?我不太喜欢将其存储在数据库中的想法,因为它在会话之后不会持久。另一方面,在我的业务层中,我找不到任何开箱即用的持久性配置。我的ASP.net应用程序提供了一个会话,但是这些会话对于业务层是不可见的。

我是否应该在会话中存储此值并使用AuthenticateRequest事件或类似的东西,将活动部门传递给业务层?

有更好的选择吗?

如何持久化业务层可用的会话数据

这些对于业务层是不可见的吗?你是什么意思?

你实际上可以从类库访问你的会话。你要做的是引用System.Web然后:

1)在你的代码中导入命名空间

2) var sessionValue = HttpContext.Current.Session["ActiveDepartment"];

或者,你可以把ActiveDepartment传递到你的业务层,每次你需要它,而不是从会话中获取它,所以你不绑定到一个web应用程序

可以在Session变量中存储活动部门:

Session["ActiveDepartment"] = 1

在业务逻辑中不需要会话管理。为业务逻辑程序集编写包装器,该包装器需要向所有调用提供ActiveDepartmentID才能有效。包装器总是返回由ActiveDepartmentID过滤的数据。

由于这是一个MVC应用程序,你也可以通过在所有控制器操作中要求ActiveDepartmentID来在控制器级别强制执行。