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

不幸的是,我们无法在每次表单提交期间分块提交信息,因此我们必须将其存储在用户会话中,直到流程结束并同时提交所有信息。

服务器内存/sql server 磁盘空间量是我可以在用户会话中存储多少的唯一限制,还是还有其他我需要考虑的因素?

编辑:该网站基于 ASP.NET Web 表单构建。

有帮助吗?

解决方案

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

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

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

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

其他提示

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

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

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

然后您将在一页上看到所有数据。

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

由于从性能角度来看,在用户 Session 对象中存储大量数据是有问题的,因此除了上述帖子中提到的方法之外,ASP.Net 还提供了一些其他解决方法。 ASP.NET 配置文件提供程序 允许您将会话相关信息保存在数据库中。您还可以使用 会话状态服务器 它使用单独的服务器来存储所有 Session 信息。这两种情况都考虑到如果需要使用集群或负载均衡器,服务器仍然可以识别跨不同服务器的会话信息。如果将信息存储在 Http Session 对象中,则会遇到一个用户必须始终访问同一服务器来进行该会话的问题。

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

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

还有其他方法可以保持状态。Cookie、弹出窗口、框架集或 iframe。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top