Asp.net mvc 3 按键和值存储数据的方法是什么?

Asp.net mvc 3 按键和值存储数据的方法是什么?,asp.net-mvc-3,Asp.net Mvc 3,我将数据存储在 HttpContext.Current.Application.Add(appKey, value); 并通过以下方式读取数据: HttpContext.Current.Application[appKey]; 这对我来说有一个好处,就是使用一个键来表示一个值,但在很短的时间(大约20分钟)后,它就不起作用了,而且我找不到[appKey],因为iis数据中的应用程序生命周期将丢失。 我想知道的是另一种按键和值存储数据的方法吗? 我不想要sql server,文件,

我将数据存储在

    HttpContext.Current.Application.Add(appKey, value);
并通过以下方式读取数据:

  HttpContext.Current.Application[appKey];
这对我来说有一个好处,就是使用一个键来表示一个值,但在很短的时间(大约20分钟)后,它就不起作用了,而且我找不到[appKey],因为iis数据中的应用程序生命周期将丢失。 我想知道的是另一种按键和值存储数据的方法吗? 我不想要sql server,文件,。。。并且希望将数据存储在服务器上而不是客户端上


我将一些数据存储在其中


感谢您的帮助

您可以在用户机器上创建一个持久cookie,以便会话不会过期,或者将会话超时增加到一个更适合您的情况/用户的值


您可以在用户的机器上创建一个持久cookie,以便会话不会过期,或者将会话超时增加到一个更适合您的情况/用户的值


由于IIS可能会在任何时候回收并丢弃任何缓存/内存内容,因此要持久化数据,唯一的方法是将其存储在IIS外部。例如:;(是的,我包括了你所说的那些你不想让列表更完整一点的,可以跳过它们)

  • 一个SQL数据库(如果价格太高,有很多免费的)
  • NoSQL数据库(与此相同,有相当多的免费数据库,通常更易于用于键/值)
  • 文件(您还声明不想要)
  • 某种外部内存缓存,即AppFabric缓存或memcached
  • Cookies(大小有一定限制,默认情况下不安全)

由于IIS可能会在任何时候回收并丢弃任何缓存/内存内容,因此要持久化数据,唯一的方法是将其存储在IIS外部。例如:;(是的,我包括了你所说的那些你不想让列表更完整一点的,可以跳过它们)

  • 一个SQL数据库(如果价格太高,有很多免费的)
  • NoSQL数据库(与此相同,有相当多的免费数据库,通常更易于用于键/值)
  • 文件(您还声明不想要)
  • 某种外部内存缓存,即AppFabric缓存或memcached
  • Cookies(大小有一定限制,默认情况下不安全)

您指的是在会话范围之外持久化数据。因此,您必须使用某种形式的持久存储(数据库、文件、缓存服务器)


你考虑过使用AppFabric吗。它实际上很容易实现。您可以使用nuget包直接从代码访问它,也可以将其配置为会话存储。(我认为)执行后一种操作将意味着您将摆脱会话超时问题。

您指的是将数据持久化到会话范围之外。因此,您必须使用某种形式的持久存储(数据库、文件、缓存服务器)


你考虑过使用AppFabric吗。它实际上很容易实现。您可以使用nuget包直接从代码访问它,也可以将其配置为会话存储。(我认为)使用后一种方法意味着您将摆脱会话超时问题。

您是否了解,无论您决定在应用程序中存储什么,应用程序中的所有用户都可以使用它

现在,关于您的实际问题,您计划存储什么样的数据?如果是用户敏感数据,那么将其存储在会话中可能是有意义的。如果它是特定于客户端的,并且不包含任何敏感信息,那么cookies可能是一种合理的方法


如果它确实是应用程序范围内的数据,并且对应用程序的每个用户都必须相同,那么您可以进行配置更改,以确保它不会在20分钟后过期。

您是否了解,您决定存储在应用程序中的任何内容都将适用于应用程序中的所有用户

现在,关于您的实际问题,您计划存储什么样的数据?如果是用户敏感数据,那么将其存储在会话中可能是有意义的。如果它是特定于客户端的,并且不包含任何敏感信息,那么cookies可能是一种合理的方法


如果它确实是应用程序范围内的数据,并且应用程序的每个用户都必须相同,则您可以进行配置更改,以确保它不会在20分钟后过期。

如果此会话存储在内存中(默认),并且如果IIS回收应用程序,则会话将无效。如果AppDomain被回收,则无论设置了多大的超时,会话中存储的所有内容都将丢失。Cookie确实是一种解决方案,但请注意,它们应该用于存储非敏感的每用户数据,而OP使用的是全局的应用程序范围,而不是每用户。@DarinDimitrov,但OP要求存储用户数据。为什么您更愿意在应用程序范围中存储用户数据的会话范围?OP表示要在哪里存储用户数据?“我在其中存储了一些用户数据。”哦,您是对的。然后我猜OP误解了这两个作用域之间的区别,因为他使用的是应用程序状态。如果此会话存储在内存中(默认),并且IIS回收应用程序,则会话将没有帮助。如果AppDomain被回收,则无论设置了多大的超时,会话中存储的所有内容都将丢失。Cookie确实是一种解决方案,但请注意,它们应该用于存储非敏感的每用户数据,而OP使用的是全局的应用程序范围,而不是每用户。@DarinDimitrov,但OP要求存储用户数据。为什么您希望在应用程序范围中存储用户数据的副会话范围?OP在何处声明要存储用户数据?“我在i中存储用户的一些数据。”