2009-09-03 19 views
0

我目前正在研究一个网站,它会有大量的流量。该网站上只有4-5页,但我需要将第1页上选择的值传递到第2页,其中存储了更多值,直到用户到达第5页,其中所有值都传递给第三方系统XML。如何使用C#在网站上存储用户输入的值?

当前我使用一个字典对象,其中大约20个键存储在一个会话对象中,以保存不同页面中的值。我这样做是因为某些值不仅仅是简单的值,比如'name'或'age'值,但可以像第2页的XML调用的结果数据集一样复杂。

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

感谢您的想法。

丰富

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

+0

我不明白这一点“我不能使用数据库来保存这些值,因为一些值需要存储的方式(即我的变量不只是字符串/整数)。”:你不能把任何东西都变成了数据库,XML,BLOBs。你可能会盯着一个来存储可乐,但... – serialhobbyist 2009-09-03 10:42:29

+0

你的用户登录吗? – serialhobbyist 2009-09-03 10:43:30

+0

我可以在数据库中存储某些值,但如果可能的话,我宁愿不将数据库和会话之间的用户/站点值分开,因为这可能是一团糟。理想情况下,我想将它们放在一起。用户在任何时候都不会登录该网站,因为它只是一个为租赁公司快速购买的网站。 – 2009-09-03 10:53:11

回答

1

我不能使用一个数据库来保存这些 值的,因为这样的一些 值需要存储(即我 变量不只是字符串/整数)。

你其实可以。您可以将对象图序列化并将其作为二进制列存储在数据库中。
此外,您可以使用此功能,并仍然使用SessionState。
这里是关于如何Store Session State in Sql Server的文章。

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

+0

我应该明确表示我已将会话存储在ASP.NET会话状态中。如果将来网站变得非常繁忙,我可以转而使用数据库来存储这些值。 – 2009-09-03 10:56:26

0

会议是正确的选择。 “全局变量很糟糕”的说法是好的,但它描述的是全局变量,而不是会话变量,并且涉及如何组织在应用程序中的方法之间传递的数据。在隐藏字段饼干(所以一切都被来回传递的每一个页面请求)

  1. Store中的数据:在页面之间存储的数据只能在三选一的方式来完成。你可以通过序列化你的XML和其他奇怪的数据来做到这一点,但这听起来像一个可怕的想法。
  2. 将数据存储在数据库中,平面文件中。这是一个好主意,但你仍然必须自己做序列化工作。
  3. 将数据存储在会话中。这与选项#2完全相同,只是C#正在为您进行序列化,然后将结果保存在平面文件中。

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

0

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

您可以使用ViewState,但这意味着所有的数据将被序列化到HTTP表单,这意味着它将在后续请求中来回传递。另外,我认为ViewState从一个ASP.NET表单被删除到下一个,所以除非你使用相同的表单,否则这是行不通的。

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

相关问题