2009-11-22 92 views
5

刚刚看完Stefan Schackow的PDC 2009 session,他提到他很惊讶人们仍然在ASP.NET中使用会话状态。会话状态甚至在ASP.NET MVC中使用internally在没有会话状态的情况下构建ASP.NET应用程序?

已经与这里的一切都投入到“进程内”会议的传统应用程序的工作(甚至是数据表!),我已经看到了会话滥用第一手。

有没有建立一个没有会话状态的ASP.NET应用程序的方法吗?您将如何为典型的电子商务工作流程的每一步存储信息?

回答

3

我多年没有使用过会议。如果您需要跟踪用户在页面之间的进度(例如通过购物车结账流程),请将您需要的任何状态信息存储在数据库中,并使用cookie将其与用户关联起来。

值得一提的是,.NET支持不同的“会议”机制,其中一个存储在数据库中(在我看来更喜欢)的信息,而不是在进程内。

+0

在高流量环境中,您的解决方案的可扩展性如何?会为每个Web请求从数据库读取/写入会话对象是一个性能问题? – Herman 2009-11-23 01:52:10

+0

这个问题的简短答案是“试试看”。但是,我们使用SQL在相对较高流量的站点上进行会话管理,并且没有发现任何性能问题。请记住,数据库是为这类事情设计的 - 快速,轻松的查询和答案。如果你用这种方法设法让一个体面的数据库服务器陷入困境,我会感到非常惊讶。 – 2009-11-23 02:19:37

+0

http://odetocode.com/articles/440.aspx – 2009-11-23 02:36:07

0

检出ASP.NET成员资格配置文件。它允许您为每个用户帐户序列化和存储/检索对象,而不管用户是匿名用户还是非匿名用户。我已经能够使用冗长的向导式在线应用程序成功地使用它。

+0

由于其本质(存储在隐藏表单字段中),viewstate不能跨页面工作。 – 2009-11-22 02:31:27

+0

你说得对。不知道我在想什么。 – 2009-11-22 04:17:44

+0

谨慎解释为什么downvote?我的意思是,大卫·洛弗利在我写这篇文章后提出了同样的困难,我得到了一个赞誉? – 2009-11-23 02:32:35

3

你有以下选项:饼干,数据库,查询字符串,页变量和服务器缓存来试图处理网络的无状态特性。每个人都有自己的权衡,但实际上我目前使用的会话存储在数据库中。这可以很好地扩展服务器场,有助于保持较小的页面大小,并且易于实现。

相关问题