【问题标题】:what way to store data by key and value?以什么方式通过键和值存储数据?
【发布时间】:2012-09-10 00:00:35
【问题描述】:

我将数据存储在

    HttpContext.Current.Application.Add(appKey, value);

并通过这个读取数据:

  HttpContext.Current.Application[appKey];

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

我在其中存储用户一些数据。

感谢您的帮助

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

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

    How to create persistent cookies in asp.net?

    Session timeout in ASP.NET

    【讨论】:

    • 如果此会话存储在内存中(默认)并且 IIS 回收应用程序,则会话将无济于事。无论您设置了多大的超时,如果 AppDomain 被回收,您在会话中存储的所有内容都会丢失。 Cookie 确实是一种解决方案,但请注意,它们应该用于存储非敏感的每用户数据,而 OP 使用的是全局的应用程序范围,而不是每用户。
    • @DarinDimitrov 但 OP 询问有关存储用户数据的问题。为什么您更愿意将用户数据存储在应用程序范围和会话范围中?
    • OP 声明他想在哪里存储用户数据?
    • “我在其中存储用户一些数据。”
    • 哦,你是对的。然后我猜 OP 误解了这两个范围之间的区别,因为他正在使用应用程序状态。
    【解决方案2】:

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

    • SQL 数据库(如果价格过高,有很多免费的)
    • NoSQL 数据库(同样的东西,很多免费的,通常更易于用于键/值)
    • 文件(你也说过你不想要)
    • 某种外部内存缓存、a'la AppFabric 缓存或 memcached。
    • Cookie(大小有限,默认情况下不安全)

    【讨论】:

    • +1,对于这个问题的真正答案。 OP 已经问过这个问题,我告诉他,除非他将这些信息保留在 AppDomain 之外,否则当 IIS 回收应用程序时他会丢失它,但我想他想对此发表第二意见。
    【解决方案3】:

    您说的是在会话范围之外持久化数据。所以你将不得不使用某种形式的持久存储(数据库、文件、缓存服务器)。

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

    【讨论】:

      【解决方案4】:

      您是否了解您决定在应用程序中存储的任何内容都将可供应用程序中的所有用户使用?

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

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

      【讨论】:

        猜你喜欢
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-24
        • 2020-02-03
        • 1970-01-01
        • 2012-09-01
        • 1970-01-01
        相关资源
        最近更新 更多