代码之家  ›  专栏  ›  技术社区  ›  Chris Westbrook

跨回发存储状态

  •  2
  • Chris Westbrook  · 技术社区  · 16 年前

    跨回发存储字符串数据的最佳方法是什么?我需要为多个实体存储一个ID和名称。我想在viewstate中使用数据表,但这会使viewstate变得太大吗?我还不能使用数据库,因为我将插入一个与其他记录相关的记录。所以我只是暂时存储它们,直到用户提交表单。

    6 回复  |  直到 16 年前
        1
  •  4
  •   John Christensen    16 年前

    实际上,您有很多选择——您选择的那个完全取决于您自己的应用程序的需求。

    1. 视图状态-可以将数据添加到页面的视图状态。这样做的好处是 只在页面上的用户的生命周期内生存,并将其发回服务器。与隐藏字段相比,它的另一个优点是,用户很难侵入它并更改您的值(我相信,实际上,您可以加密您的视图状态)。当然,缺点在于页面大小——您添加到视图状态的所有内容都是另外一件事情,它会被放到用户的页面上,然后被发布回服务器。这使得存储大量数据变得不理想。

    2. cookies-您可以将信息以cookies的形式发送给用户。在这种情况下,您可以声明该信息将持续多长时间-对于打开浏览器的用户范围,或特定日历时间。每次用户访问应用程序的任何页面时,该信息都将可用。坏消息是,您可以存储的信息量有限,而且用户可以很容易地更改自己的cookie。

    3. 会话-您将用户信息存储在自己服务器的内存中(我将不讨论各种类型的会话存储)。在这种情况下,信息将与用户的会话寿命一样长,并可用于应用程序的所有页面。用户直接修改这些值是没有风险的,尽管会话劫持是您可能想要探讨的风险。但缺点是,在这种情况下,您使用的是宝贵的服务器资源——如果您的应用程序有很大的负载,那么将来它可能会影响您的可伸缩性。

    如我所说-您选择做什么将完全取决于您的应用程序的需求和要求。

        2
  •  1
  •   Danimal    16 年前

    有几种方法(虽然不是详尽的清单):

    • 对象
    • 隐藏字段
    • 阶段
    • 查询字符串
    • 曲奇饼
        3
  •  1
  •   EndangeredMassa    16 年前

    视图状态良好。如果您是跨回发存储它,那么客户端解决方案是最好的。所以,您将在某处添加大小——在视图状态或隐藏字段中。

    如果您想在服务器端执行此操作,可以使用该会话,但请记住在可以的时候进行清理。

        4
  •  0
  •   Toby Mills    16 年前

    您可以将它们存储到一个cookie中,这也允许您从javascript中访问它们。或者,您可以将一个简单的字符串数组存储到视图状态。很大程度上取决于您希望存储什么和多少信息。

        5
  •  0
  •   nathaniel    16 年前

    当我有这个场景时,我会为我的字段创建一个结构,并将其填充到视图状态中。考虑到整个页面的控件集已经存在,我同意在页面大小和生命周期中添加一个小结构:)

    此外,它会在你完成页面后自行清理,所以不用担心会把你的会话填满垃圾。

        6
  •  0
  •   Community CDub    7 年前

    我同意 accepted answer 但我还想补充一点,如果您只想跟踪一个简单的键/值集合,那么最好将一个通用字典放入viewstate或session中:

    Dictionary<int, string> myValues = new Dictionary<int, string>();
    myValues.Add(1, "Apple");
    maValues.Add(2, "Pear");