您假设会话存储和数据库存储是互斥的。他们不是。但是,让我们从假设它们开始。
会话存储的优点有三方面:
- 无需将数据显式插入数据库。您只需要简单地设置一个会话变量就可以了。功能简单且低风险。
- 无需管理用户访问和购物车的生命周期,因为容器/框架可以帮助您
- 通常,您会自动清除旧的空闲会话。
会话存储的缺点:
- 会话亲缘关系,除非您调查复制
- 除非进行调查或将会话状态手动保留到磁盘,否则不会进行故障转移,否则可能会变得很复杂。
- 所有会话必须存储在内存中。如果使用复制,则会放大。
数据库存储的优点:
- 无需担心会话亲缘关系或状态复制。您可以轮询所有请求。
- 减少应用程序中的内存开销。
- 如果订单完成,无论如何一切都将最终存储在数据库中,因此可以轻松完成,因为数据已经存在。
数据库存储的缺点:
- 废弃的购物车-一些匿名用户向其购物车中添加了商品,然后消失了。除非您有某种到期过程,否则该数据将永远存在。
- 您需要想出一种方法来跟踪用户,并弄清楚对于给定的请求,这表示是现有的浏览会话还是新的浏览会话。(是的,如果您使用cookie,这可能很容易,但是如何确保两个用户的ID不相同?)。
- 更多代码
您没有提到您使用的平台。我将寻求一种使用数据库支持的会话的方法,其中会话数据仅在请求/响应周期的生命周期中存在于内存中,然后从数据库加载并保存回数据库。过去这对我很有帮助。
数据库支持的会话的优点:
- 无需服务器关联。
- 轻松存储在应用服务器上
- 空闲/已放弃的会话数据将为您清除。
- 用户首次访问,重复访问,会话结束的生命周期都已为您找到。
- 易于编码
数据库支持的会话的缺点:
- 配置-您需要研究容器,无论它是PHP,Java EE(Tomcat,Jetty,JBoss等),node.js + express.js还是不支持此容器的容器,并提供正确的配置。
- 您可能需要对此进行负载测试,因为每个请求要添加2个数据库操作。
还有第三种可能性,有人在前面提到过。您可以将所有内容都嵌入Cookie或html本地存储中,从而完全跳过会话的使用,而使用客户端存储。
我将把它的优缺点留给您练习,但我会向您暗示,对于html5存储,浏览器的兼容性可能需要仔细检查。
我已经为您概述了事实。希望这可以帮助您根据情况做出正确的决定。