我可以使用HttpContext.Application而不是Session来存储会话特定数据吗?

时间:2012-10-13 19:27:57

标签: asp.net-mvc asp.net-mvc-2 session-variables session-state

我需要访问ASP.NET MVC 2应用程序的控制器中的用户特定数据。我的控制器类有2个控制器方法:

[ControllerSessionState(ControllerSessionState.ReadOnly)]
public class CalendarController : BasicController
{
    [Authorize]
    public ActionResult ControllerMethod1()
    {
       //reads session specific data
    }

    [Authorize]
    public ActionResult ControllerMethod1()
    {
       //stores session specific data
    }
}

我希望将请求并行化,即ControllerMethod1应该能够与ControllerMethod2并行运行。出于这个原因,我将会话标记为 ReadOnly 。但是,ControllerMethod2必须将数据写入“会话”。由于这是不允许的,我考虑将我的数据存储在HttpContext.Application中。我可以在对象的名称中编码user-id,例如:

 HttpContext.Application["Data" + currentUser.UserId] = <<my_data>>;

我可以这样做吗?这种方法有什么缺点吗?

1 个答案:

答案 0 :(得分:1)

不要为明显需要在会话存储中写入的控制器指定ControllerSessionState.ReadOnly

相反,尝试以另一种方式解决并发问题(例如使用适当的锁定机制)。

另外,考虑同一用户在同一时间访问这两种方法的几率。我认为这些可能性非常低,以至于在这种情况下并发性并不值得考虑。