您可以/应该在用户会话对象中存储多少数据?

时间:2008-09-16 14:36:23

标签: asp.net session

我们的网站上有几个向导式表单应用程序,我们在每个页面上捕获用户的信息,然后使用Web服务提交到后端进程。

很遗憾,我们无法在每个表单提交过程中以块的形式提交信息,因此我们必须将其存储在用户会话中,直到流程结束并同时提交所有内容。

服务器内存/ sql server磁盘空间的数量是我可以在用户会话中存储多少的唯一约束,还是我还需要考虑其他事项?

编辑:该网站建立在ASP.NET网络表单上。

5 个答案:

答案 0 :(得分:3)

假设信息不敏感,那么您可以将信息存储在cookie中,这将减少服务器端存储所需的信息量。这也允许您通过JavaScript访问信息。

或者您可以使用视图状态来存储信息,尽管这会导致在服务器和客户端之间发送大量数据,而不是我首选的解决方案。

您应存储的会话信息量根据应用程序,预期用户数量,服务器规格等而有很大差异。要提供更准确的答案,需要更多信息:)

最后,假设在页面之间不需要整个过程中收集的信息,那么您可以将所有信息存储在数据库表中,并仅将记录唯一ID存储在会话中。在提交每个页面时,将更新db记录,然后在最后一页上检索并提交所有信息。如果由于所需的db读取次数需要检索每个后续页面上的先前信息,这不是一个想法的解决方案。

答案 1 :(得分:2)

您还可以拥有1个包含整个html表单的asp页面,并隐藏部分内容,直到用户填写并“提交”可见部分...

然后只需隐藏填写的部分并显示表单的下一部分......

这在.NET框架中非常容易,为每个“向导步骤”使用面板,并在显示和隐藏每个面板时添加loggic。

然后,您将在一个页面上拥有所有数据。

答案 2 :(得分:0)

如果您使用传统的HTTP模型(即不使用runat =“server”),您可以将数据发布到另一个asp页面并将发布的数据放入隐藏的表单元素中,您可以为多个页面执行此操作因此需要避免在会话变量中放置任何内容。

答案 3 :(得分:0)

由于从性能的角度来看,在用户Session对象中存储大量数据是有问题的,ASP.Net提供了一些其他的解决方法,除了上面的帖子中提到的内容。 ASP.NET Profile Provider允许您在数据库中保存与会话相关的信息。您还可以使用Session State Server使用单独的服务器来存储所有会话信息。如果您需要使用群集或负载平衡器,这两种情况都会考虑,服务器仍然可以识别不同服务器上的会话信息。如果将信息存储在Http Session对象中,则会遇到一个用户必须始终转到该会话的同一服务器的问题。

答案 4 :(得分:0)

会话,视图状态,数据库。这些都很慢,但会完成工作。

隐藏的表单字段是我最喜欢的答案。

还有其他方法可以坚持国家。 Cookie,弹出窗口,框架集或iframe。