MVC中页面之间的会话状态

时间:2013-01-24 18:00:22

标签: asp.net-mvc session-state

除了TempData之外,我认为这不是现在使用的最好的东西,在如何将用户数据从页面持续存储到页面的最佳实践是什么?

你通常只是每次都回到数据库... ajax或者不是......你每次都提出请求还是将它存储在请求对象或其他进程对象实例中? / p>

我只是在寻找各种各样的想法,因为我在网上看到这一点已经不堪重负......那里有很多东西,我也可以更容易通过堆栈获得一些洞察力。< / p>

1 个答案:

答案 0 :(得分:0)

有几种选择。如果我们谈论内部请求,那么ViewBag当然是最好的选择。 Intrapage(跨请求)然后最好的选择可能是隐藏字段,除非它是敏感数据。

在页面之间,有几个选项。您当然可以将数据作为查询字符串参数传递。 Session也是一个方便的选项,只要数据大小很小,如果会话丢失就可以了(即你可以再次获取它或重新生成它)。在某些其他情况下,您可以使用隐藏字段将数据发布到另一个页面,但这应该在很大程度上不鼓励,因为您应该更喜欢使用PRG(发布/重定向/获取)模式。

其他一些选项正在使用上下文缓存HttpContext.Cache(我觉得这个名字不好,但很好)或将其保存在数据库的临时表中。如果您决定迁移到Web场,任何“内存中”选项都会出现可伸缩性问题(会话可以由数据库支持,但会减慢速度)。

这还取决于您所谈论的数据。如果是用户数据,则另一个选项是将其存储在cookie中,或者使用Forms Authentication cookie的用户数据部分,并创建自定义IIdentity对象。

最后,只是在每次请求时都从源头重建数据。