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

如何使用C#在网站上存储用户输入的值?,c#,global-variables,C#,Global Variables,我目前正在一个网站,将有一个高流量的工作。网站上只有4-5页,但我需要将第1页上选择的值传递到第2页,在第2页上存储更多值,依此类推,直到用户到达第5页,在第5页上,所有值都使用XML传递给第三方系统 目前,我使用一个dictionary对象,在一个session对象中存储大约20个键,以保存不同页面上的值。我之所以这样做,是因为有些值不仅仅是简单的值,如“name”或“age”值,还可能很复杂,如在第2页保存XML调用结果的数据集 我到处都读到全局变量是不好的,所以我想知道在这个例子中是否有一

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

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

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

谢谢你的想法

丰富的

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

会话是正确的选择。“global variables is bad”参数是一个很好的参数,但它描述的是全局变量,而不是会话变量,并且与如何组织应用程序中方法之间传递的数据有关。在页面之间存储数据只能通过以下三种方式之一进行:

  • 将数据存储在隐藏字段中cookies中(这样每个页面请求都会来回传递所有内容)。您可以通过序列化XML和其他奇特的数据来实现这一点,但这听起来是个糟糕的主意
  • 将数据存储在一个数据库平面文件中。这是一个好主意,但您仍然需要自己完成序列化工作
  • 将数据存储在会话中。这与选项#2完全相同,只是C#为您进行序列化,然后将结果保存在平面文件中

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

    我认为会话是放置与您的“会话”相关的内容的合适位置。确实,过度使用/滥用会话可能会导致内存消耗过多,但替代方案可能会稍微慢一点,这取决于具体情况。此外,如果使用SessionStateService或将会话存储在SQL Server中,则在对每个请求的会话对象进行序列化/反序列化时会减慢速度

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

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

    我不能使用数据库来保存这些 由于某些 需要存储值(即我的 变量不仅仅是字符串/整数)

    你真的可以。您可以序列化对象图并将其作为二进制列存储在数据库中。
    此外,您还可以在开箱即用的情况下继续使用SessionState功能。
    这里有一篇关于如何使用的文章


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

    我不理解“我不能使用数据库来保存这些值,因为某些值需要以某种方式存储(即,我的变量不仅仅是字符串/整数)。”:你不能将任何内容放入数据库、XML、BLOB中吗。您可能会勉强找到一个来存储cola,但是…我可以在数据库中存储某些值,但如果可能的话,我不希望在数据库和会话之间分割用户/站点值,因为这可能会造成维护混乱。理想情况下,我想把这一切都放在一起。用户在任何时候都不会登录这个网站,因为它只是一个为一家租赁公司快速购买的网站。我认为第一条规则不是盲目地相信你所读到的“全局变量是坏的”,“数组是坏的”,如果你不关注情况的话,它们都是虚假陈述。根据情况,它们可以是好的,也可以是坏的,因为没有逻辑非常适合优化cpu速度或优化内存使用,会话变量会减少cpu使用,但会增加内存开销,而其他存储可以减少内存,但会增加cpu使用,它的所有情境和基本知识都比盲目地关注任何博客说这是不好的要好!!是的,我会第一个同意你的,阿卡什。只是想了解一下其他.net开发人员通常会做些什么来克服这种障碍:)我应该清楚地表明,我已经在ASP.net会话状态下存储了我的会话。如果站点将来变得非常繁忙,我可以转而使用数据库来存储这些值。