代码之家  ›  专栏  ›  技术社区  ›  Richard Reddy

如何使用c_在网站上存储用户输入的值?

  •  0
  • Richard Reddy  · 技术社区  · 17 年前

    我目前正在一个网站上工作,它将有大量的流量。网站上只有4-5页,但我需要将在第1页选择的值传递到第2页,在那里存储更多的值,依此类推,直到用户到达第5页,在那里所有值都使用XML传递给第三方系统。

    目前,我使用一个字典对象,在一个会话对象中存储大约20个键,以保存不同页面上的值。我这样做是因为有些值不仅是简单的值,如“name”或“age”值,而且可能很复杂,如保存第2页上XML调用的结果数据集。

    我到处都读到全局变量是坏的,所以我想知道对于这个例子,是否有一种使用会话的替代方法?我不能使用数据库来保存这些值,因为有些值需要存储(即,我的变量不仅仅是字符串/整数)。如果要使用全局静态变量,如何确保每个用户的全局变量都是唯一的?

    谢谢你的想法。

    丰富的

    **编辑1 ** 我将当前会话存储在ASP.NET会话状态,而不是InProc。我只是想弄清楚我所做的是不好的实践,还是被普遍认为是一种好的做事方式。例如,在第二页上,我得到一个XML结果,该结果作为数据集存储在会话中,以供在站点的第3/4页上使用。我应该以另一种方式存储/传递此信息吗?

    3 回复  |  直到 17 年前
        1
  •  1
  •   Dmytrii Nagirniak    17 年前

    我不能用数据库保存这些 价值观是因为 需要存储值(即 变量不仅仅是字符串/整数)。

    你真的可以。可以将对象图序列化,并将其存储为数据库中的二进制列。
    此外,您可以开箱即用地使用此功能,并且仍然可以使用sessionstate。
    这是一篇关于如何 Store Session State in Sql Server .

    因此,我建议使用会话,但将会话状态存储在数据库中。

        2
  •  0
  •   VoteyDisciple    17 年前

    会话是正确的选择。“全局变量是坏的”参数是一个好参数,但它描述的是 全局变量 不是 会话变量 它涉及如何组织在应用程序中的方法之间传递的数据。在页面之间存储数据只能通过以下三种方式之一完成:

    1. 将数据存储在 隐藏字段 曲奇饼 (所以每一个页面请求都会前后传递)。您可以通过序列化XML和其他花哨的数据来做到这一点,但这听起来是一个糟糕的主意。
    2. 将数据存储在 数据库 ,请 平面文件。 这是一个好主意,但你仍然需要自己做系列化工作。
    3. 将数据存储在 阶段 . 这与选项2完全相同,只是C正在为您进行序列化,然后将结果保存到平面文件中。

    您不必做任何工作来将一个用户的数据与另一个用户的数据分开。每个访问者都会得到一个独特的会话,并且您存储在那里的数据将永远不会应用于其他用户(不包括恶意攻击,如被劫持的会话)。

        3
  •  0
  •   oglester    17 年前

    我认为会话是放置与您的“会话”相关内容的适当位置。它 诚然,过度使用/滥用会话会让您的内存消耗过多,但备选方案可能会慢一点,这取决于具体情况。此外,如果使用sessionstateservice或将会话存储在SQL Server中,则在对每个请求上的会话对象进行序列化/反序列化时速度会减慢。

    您可以使用viewstate,但这意味着所有数据都将被序列化为HTTP表单,这意味着它将在后续请求中来回传递。另外,我认为viewstate会从一个ASP.NET窗体移到下一个窗体,所以除非您使用同一个窗体,否则这将不起作用。

    您可以将数据存储在数据库中。一种方法是让会话使用SQL Server。如果我要使用一个数据库来解决这个问题,我认为我不会在SQL Server中使用会话,尽管这只是因为如果您自己存储会话,那么您可以恢复以前输入的数据。