ASP.Net MVC行业标准中的会话变量是什么?

时间:2017-09-14 03:29:51

标签: asp.net-mvc

我正在编写一个数据库应用程序,它将记录集返回给我的控制器。我想重用它们,因为它们是静态数据(基于用户,对每个用户都不同),并根据需要使用Linq根据用户的多个请求进行求助/搜索。

在过去,会话变量在ASP.NET MVC中非常不受欢迎,甚至是禁忌,因为该技术的一个好处是它应该是火上浇油而忘记。现在我看到更多的人建议使用Session变量来保存记录集。

现在是标准,还是有更好的方法来处理使用相同记录集的多个请求?例如,我应该创建一个本地服务来保存只能为我的ASP.Net MVC应用程序提供服务的数据吗?别的什么?

2 个答案:

答案 0 :(得分:1)

您可以使用会话对象。如果您想继续使用会话check this link。如果实施相同的方法,它有更好的方法。此外,如果将会话本身存储在SQL Server中,它将没有多大用处。在这种情况下,最好将它作为JSON字符串存储在不同的会话用户表中。

如果您在所有时间点的会话中用户数量较少,例如某个公司内部的应用程序,您可以使用Flyweight设计模式和a singleton后面的字典来显示{{1}并始终获取数据。 Check the singleton sample here.

如果您想要一个具有大量用户的可扩展应用程序,请检查以下内容。

您也可以在memory cache as Object Cache下使用System.Runtime.Caching,按用户键,如果不在缓存中,请从数据库中获取。

如果您使用的是Windows服务器环境,也可以使用redismemcachedAppFabric Data Caching之外的进程外缓存。

然后,您可以拥有noSql数据库like mongoDB,用于仅在服务器上存储会话数据。如果一段时间后没有活动,请清除会话数据。

答案 1 :(得分:1)

总的来说,由于其局限性,会议不受欢迎。例如,它是高度序列化的,并且可以极大地影响性能,尽管使用属性使会话只读可以改善这一点。另一个问题是会话是不稳定的,并且只要IIS需要更多内存,它就会消失。它也不安全,也不应该用于任何安全的东西。

更好的选择可能是使用asp.net缓存来存储数据,甚至是HttpContext.Items数组(如果你只需要基于每个请求)。

如果您需要扩展到多个服务器,会话也是一个扩展问题。

一般情况下,只对较小的应用程序使用会话,这些应用程序不会有很多需求。

如果您确实使用了Session,那么我建议抽象访问它,这样如果您发现Session不具备性能,您可以在以后轻松更改实际的存储机制。