@glautrou 的回答非常充分,我也不支持这样做session
。
除了@glautrou 的回答,我将解释如何在一张桌子上工作而不创建不同的桌子。
工艺步骤:
- 用户访问您的网站
- 无需登录网站即可将产品添加到购物车
- 将产品添加到购物车时,您会
cart cookie
为用户创建一个。您可能对此 cookie 没有时间限制,或者您可以设置 1-3-6 个月的限制。(请注意,如果用户删除了他们的 cookie,那么将 cookie 保留那么长时间没有多大意义。)
- 这样
cart cookie
,您将产品信息保存在购物车表中(通过ProductId
)。(ProductId、UserCookieCartCode、数量等)
- 只要用户不删除 cookie 或 cookie 过期,用户每次访问网站前都会看到添加到购物篮的产品。*
*当然,这些产品可能已停售或价格可能会发生变化。您也可以进行此类检查。
现在让我通过一些练习来解释它们:
如果访问者将项目添加到购物车而不是成员,您可以创建一个cart cookie
并将此值添加到Shopping Cart
表中,例如在VisitorCookieId
字段中。
如果访问者决定登录,您将登录userID
与匹配VisitorCookieID
并更新该UserID
字段。如果一个人希望注册一个新的,这同样适用。这是用户体验方面的一个重要标准。
因此,您可以从同一张表中管理登录/非会员访问者的信息。
数据库结构示例如下(以 为例SQL Server
):
在这里,您只能创建一个ShoppingCart
表并将诸如UserId
、VisitorCookieId
、ProductId
、等信息保存Quantity
在一个表中。但是,“在我看来”这不是正确的方法,因为如果用户将此购物车转换为订单,您必须采取额外的措施,因为同一用户会有多个订单行。在这种结构中,您使用单个订单信息进行交易。
也许您可以OrderId
在表格中添加一个字段ShoppingCart
并在订购购物车时绑定它们。当然,除非您永久删除变成订单的购物车信息,否则这将是有效的。
这里有一些重要的事情;正如我上面提到的,用户可能会删除 cookie,可能不会再次访问该站点,或者可能不会购买他添加到购物车中的产品。这对于您的用户体验报告来说是非常重要的数据。
例如;
- 如果访问者在未登录的情况下将产品添加到购物车,则 cookie ID 将添加到 VisitorCookieId 字段。在这里您可以分析未注册/未登录的访问者。
- 如果访问者将产品添加到购物车然后登录,您还将更新与此 cookie ID 匹配的 UserId 字段,正如我在第一行中解释的那样。因此,您可以分析未登录交易的会员。新注册的情况相同,这种情况下,您可以查看加入购物车的日期和会员日期。
- 您可以检查那些
VisitorCookieId
字段为空且UserId
字段已满的人,作为登录并采取行动的人。当然,这里还有另一个分析机会。这些成员是否还有其他填写了 VisitorCookieId 字段的订单?
这些例子不胜枚举。总之,使用 Cookie 代替 Session 在数据库和应用程序性能方面是有益的。此外,使用 Session 进行交易并不总是提供相同的效率,即使您设置了数据的持续时间,它也可能在该时间之前丢失。
cookie 也可能存在问题;用户可以删除 cookie 或不允许 cookie。在这种情况下,我们将尊重用户的选择,并向他们明确表示,如果他们不使用 cookie,将无法从网站获得良好的性能。
与一般标准一样,重要的是要确定哪种方法最适合您的结构。您找到适合自己的解决方案可能会更好,而不是通用标准。在这里,我提出了一个建议,将通用标准与适合我的解决方案结合起来,希望对这个页面的新手有用。
** 如果您想定期删除此数据、将其移动到不同的表或报告它,您可以为它们创建计划任务结构。Quartz.Net
或者Hangfire
对这些有用。