我应该使用什么而不是会话?

时间:2016-04-11 20:13:54

标签: c# .net asp.net-mvc

我正在开发一个项目,我需要根据已登录用户的个人资料构建菜单列表。但是,目前我必须在每次加载页面时构建此列表,这对我的项目来说不太好。

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

我已尝试在OutputCache中使用会话,Cookie和ActionResult,但只有会话有效。

有没有办法将我的列表存储在"全局变量"或类似的东西中,并且总是需要它使用它?

3 个答案:

答案 0 :(得分:2)

我可以为你提出两个选择。

  1. 为每个用户使用Session对象。 或
  2. 使用缓存机制 - 如果您在应用程序中实现了一些缓存机制,则可以为每个存储导航菜单的用户创建一个对象(类似于Redis,AppFabric或.NET缓存)。
  3. 与菜单相关的对象应该只为用户创建一次(您可以在登录期间创建它)。

答案 1 :(得分:1)

我会在创建/更改配置文件时创建一个存储构建列表的数据库(可能就像JSON字符串一样简单吗?)。用户ID引用。

然后只需一个用一个用户id值选择它的情况 - 一个简单的数据类型可以得到一个复杂的数据类型。

答案 2 :(得分:0)

感谢您的帮助。

要解决我的问题,我必须使用会话。为什么?因为每个用户都有他自己的'(SidebarViewModel)会话["侧边栏"]'其中包含所有特定菜单,名称,ID和头像。

我试图使用" OutputCache" (我自己的属性类),但由于我的菜单是一个ChildAction,我在注销时无法清除缓存,对于可以在他想要的时候更改自己的头像的用户来说这不太好。我也尝试使用该应用程序,但几乎与Sessions的情况相同。

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