Asp.net mvc MVC中是否有会话变量的最佳实践和推荐替代方案

Asp.net mvc MVC中是否有会话变量的最佳实践和推荐替代方案,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,session,session-variables,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Session,Session Variables,好的,首先,在任何人试图确定这是一个“重复”的问题之前;我已经回顾了SO上关于类似问题的大部分帖子,但即使结合所有已经说过的内容,我仍然有点进退两难,无法确定,或者我应该说一致同意这一点 不过,我可以说,我(根据帖子)最终确定答案是基于要求的范围。但是,即使考虑到这一点,我的意见似乎过于多样化,无法决定如何处理这一问题 我的直接要求是,我需要在多个视图中保存来自1个控制器的变量数据。更具体地说,我有一个控制器和相应的视图来处理购物车项目计数,我希望在多个视图中持久化该数据。我认为layout视图

好的,首先,在任何人试图确定这是一个“重复”的问题之前;我已经回顾了SO上关于类似问题的大部分帖子,但即使结合所有已经说过的内容,我仍然有点进退两难,无法确定,或者我应该说一致同意这一点

不过,我可以说,我(根据帖子)最终确定答案是基于要求的范围。但是,即使考虑到这一点,我的意见似乎过于多样化,无法决定如何处理这一问题

我的直接要求是,我需要在多个视图中保存来自1个控制器的变量数据。更具体地说,我有一个控制器和相应的视图来处理购物车项目计数,我希望在多个视图中持久化该数据。我认为layout视图是最符合逻辑的选择

现在,我已经成功地完成了这个任务,将值分配给从我的_布局视图中检索到的会话变量;因此,即使用户要在网站内的任何地方导航,购物车中的物品数量也将持续存在,直到他们离开网站或完成结帐;在这种情况下,变量将在代码中清除

我读过的帖子似乎偏向于要么远离会话变量,支持cookie,要么将数据存储在数据库中;或者说对于我提议使用它们的目的,会话变量是完全可以使用的

我读到的另一件事表明,如果站点上存在高流量,会话变量可能会妨碍整体性能,因为信息存储在服务器上

我个人无法证明将此类信息存储在数据库中并随后访问数据库是合理的,因为我认为这也会影响站点性能,而且对于临时数据的存储来说似乎有点过火。TempData、ViewData和ViewBag不能持久化数据,因此它们不是需求的逻辑选择

如果有另一个非常适合会话变量的替代方案(它对我有效),我想知道它是什么

在提供最佳推荐的过程中,有两篇文章似乎相互矛盾,这让我有点困惑

缺点:

优点:

似乎这个问题(尽管有许多不同的变体)没有我能得出的明确答案

如果有一个更可取的方式来实现这一点,而不过度杀戮,那么这就是我在寻找的答案

我在某个地方读到了MVC过滤器与Global.ascx应用程序启动部分的结合使用,但这似乎不像静态变量那样适用于在控制器级别设置的变量

有人能不能(因为没有更好的词)挤掉关于这个话题的许多不同观点,并为这个问题提供一个更明确的答案?我确信不同的观点有其独特的地位,我并没有试图抹黑他们。但有一个明确且可能一致的答案会更好;然后我可以对其他帖子进行排序,以确定什么最适合我的申请

当然,如果这个问题没有明确的答案;只要告诉我,我会尝试从其他帖子中得出我自己的答案

谢谢

===========================================================

对所提供答案的最新答复 从回答来看,缓存和cookie似乎是一个普遍的首选项,但我也注意到,缓存不是跨多个web服务器使用的理想候选项,因为同步可能是一个潜在的问题

值得赞扬的是,Tim指出数据库存储已经优化,用户可以选择稍后返回并继续他们离开的地方

这是一个很好的观点,但要对可能性保持远见;这可能是合理的,因为有些用户可能不会返回,而在数据库中留下不必要的数据

因此,保持数据库的优化和干净(这对我来说同样重要)需要执行维护任务,根据设置的时间阈值自动终止这些记录,以考虑这些情况。虽然维护任务不是一个毫无疑问的选项,但我仍然认为这仅仅是为了作为临时存储的目的而增加了一点工作

尽管如此,我还是尊重蒂姆的建议,并相信在一定程度上反对我最初的观点是值得的;数据库似乎不是存储临时数据的可行选择;因此,我认为折衷方案是在结帐后将数据存储在数据库中(考虑购物车或类似场景)。如前所述,通过这种方式,可以在后续访问时持续跟踪数据,以便您拥有交易记录。但更重要的是,这些事务的数据与数据库具有真正的相关性

还有人说,虽然会话比数据库快;但是,尽管有一些警告,但可以通过其他机制(例如利用SessionStateBehavior属性)在一定程度上减轻这些警告,仅作为一个示例

但是。。。我认为埃里克用邓宁·克鲁格效应把这一点带回家了。虽然,从这里给出的建议答案的内容和解释来看;我严重怀疑作出回应的任何个人的专业知识是否值得怀疑。尽管如此,我倾向于同意这样一个事实,即获得一致意见可能比我的合理期望要高一些

更具体地说,我想要的是对一种可以舒适地适应的技术的普遍共识