ASP.NET会话 – 使用或不使用电子商务应用程序的最佳实践

我在大多数内联网场景中使用过ASP.NET并且非常熟悉它,但是对于诸如购物车或类似会话数据之类的东西,存在各种可能性。 仅举几例:

1)状态服务器会话

2)SQL Server会话

3)自定义数据库会话

4)Cookie

您使用了什么以及我们的成功或经验教训是什么以及您会推荐什么? 这显然会对大型公共网站产生影响,请评论您的体验。

我没有提到进程,因为在大型应用程序中没有这个地方。

非常感谢阿里

进程当然可以在大规模应用中占有一席之地; 它只需要在负载平衡级别上进行粘性会话。 事实上,使用进程内会话可以降低维护成本和基础架构开销。 您在农场前使用的任何企业级内容交换机肯定会提供此类function,并且很难争论购买/配置/集成状态服务器的现金和人力而不仅仅是翻转交换机。 我在相当大规模的ASP.NET系统中使用它,没有任何问题可言。 RAM太便宜了,不能忽视这个选项。

我学到的最重要的教训是我在理论上已经知道的,但在实践中得到了解。

完全从应用程序中删除所有会话的使用(并不一定意味着所有站点)是我们都知道应该为可伸缩性带来重大改进的东西。

我学到的只是它可以有多大改进。 通过删除会话的使用,并添加一些代码来处理他们之前处理的内容(在每个单独的点都是性能损失,因为每个单独的点现在比以前做更多的工作),性能增益是巨大的在几秒钟或甚至几分钟内进行操作的操作成为亚秒级,CPU使用率变为原来的一小部分,机器数量和RAM数量明显不足以应对,是一个相当过度放纵的硬件数量。

如果无法完全删除会话(人们不喜欢浏览器使用HTTP身份validation的方式,唉),将大部分内容移动到一些明确定义的位置,最好是在服务器上的单独应用程序中,可以产生更大的影响使用会话存储方法。

进程内会话(至少在使用IIS6时)可以随时回收,因此不太可靠,因为会话将在服务器决定时结束,而不是会话实际超时。 部署新版本的网站时,会话也将过期,而基于服务器的会话提供程序则不然。 如果您在会话过程中进行更新,这可能会给您的用户带来糟糕的体验。

使用Sql Server是最佳选择,因为可以使会话永不过期。 但是,必须考虑服务器的成本,磁盘空间,维护和性能。 我在我的电子商务应用程序上使用了一个已经有好几年了,直到我们将提供商更改为数据库空间非常少的提供商。 遗憾的是它必须走了。

我们现在使用国家服务已经有3年了,并且没有任何问题。 也就是说,我们现在将会话超时设置为电子商务中的一小时,这可能会使我们的业务与永不过期的模型相比。

当我在一家大公司工作时,我们在另一个应用程序中使用了群集SQL Server,这对于保持联机更为重要。 我们在系统的每个部分都有多次冗余,包括网卡。 请记住,添加状态服务器或服务会为应用程序添加潜在的单点故障,除非您使用群集路由,维护成本更高。

当我们第一次切换到基于SQL的方法时,也存在一个问题,即二进制对象无法序列化为会话状态。 我只有一些并修改了代码,所以它不需要二进制序列化,所以我可以让网站在线。 然而,当我几周后回去修复序列化问题时,它突然不再存在了。 我猜它是在Windows Update中修复的。

如果您担心安全性,状态服务器是禁止的。 状态服务器绝对不执行访问检查,任何被授予tcp端口状态服务器使用权限的人都可以访问或修改任何会话状态。

在proc中是不可靠的(你提到过),所以不考虑。

Cookie不是真正的会话状态替换,因为您无法在那里存储太多数据

我投票支持某种基于数据库的存储(如果需要的话),它具有扩展的最佳可能性。