C# 我应该使用什么来代替会话?

C# 我应该使用什么来代替会话?,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我正在做一个项目,我需要根据登录用户的配置文件建立一个菜单列表。但是,目前我必须在每次加载页面时构建此列表,这对我的项目来说不是太好 我想做的是,只有当用户登录时才能获取此列表,并在每次需要时使用它。我的想法是在用户登录时将此列表存储在会话中。但我知道这不是一个好的练习 我尝试在ActionResult中使用会话、cookie和OutputCache,但只有会话有效 有没有一种方法可以将我的列表存储在“全局变量”或类似的东西中,并在我需要时始终使用它?当用户id引用配置文件时,我会创建一个数据库

我正在做一个项目,我需要根据登录用户的配置文件建立一个菜单列表。但是,目前我必须在每次加载页面时构建此列表,这对我的项目来说不是太好

我想做的是,只有当用户登录时才能获取此列表,并在每次需要时使用它。我的想法是在用户登录时将此列表存储在
会话中。但我知道这不是一个好的练习

我尝试在
ActionResult
中使用会话、cookie和
OutputCache
,但只有会话有效


有没有一种方法可以将我的列表存储在“全局变量”或类似的东西中,并在我需要时始终使用它?

当用户id引用配置文件时,我会创建一个数据库来存储构建的列表(可以是像JSON字符串一样简单的东西)


简单地说,如果用一个用户id值选择它,一个简单的数据类型可以得到一个复杂的数据类型。

我可以为您提出两个选项

  • 为每个用户使用会话对象。 或
  • 使用缓存机制-如果在应用程序中实现了某种缓存机制,则可以为每个用户创建一个对象来存储导航菜单(类似于Redis、AppFabric或.NET缓存)
  • 与菜单相关的对象只能为用户创建一次(您可以在登录时创建)。

    感谢所有帮助

    为了解决我的问题,我不得不使用会话。为什么?因为每个用户都有自己的“(SidebarViewModel)会话[“sidebar”]”,其中包含所有特定的菜单、名称、ID和化身

    我曾尝试使用“OutputCache”(我自己的属性类),但由于我的菜单是一个ChildAction,因此我无法在注销时清除缓存,这对可以在需要时更改自己的化身的用户来说不太好。我也尝试过使用这个应用程序,但它与会话的情况几乎相同


    PS:我不喜欢会话,但我认为这是目前最好的方式。

    这正是
    Session
    的含义。使用会话并不一定在所有情况下都是错误的,但它可能被误用。这种情况听起来像是会话的真正目的,所以请使用它。可能不会尝试像Redis这样的sql数据库,它快速可靠,经常用作快速exchange存储。@Vladimir是的,我想我会尝试Redis。@Igor它听起来不错,我没有使用html5,因为大多数计算机都太旧了,无法运行应用程序。我已经创建了一个表来存储菜单。但目前每个请求我都必须从数据库(SQL Server)获取此菜单,而这正是我不想做的。抱歉,是的,在重读时,您将基于登录构建并在登录会话的页面上提供服务。所以会话正是您应该使用的。