哪种后端设计选择更适合处理来宾用户?将访客存储为具有is_guest字段的用户,还是在会话中存储访客数据?

Which back-end design choice is better for handling guest users? Storing guests as users with is_guest feild, or storing guest data on the session?

提问人:Oscar R 提问时间:11/6/2022 更新时间:11/6/2022 访问量:204

问:

我正在建立一个电子商务网站,它应该能够处理客人结账。当用户访问网站时,除非他们注册/登录其帐户,否则他们被视为“访客”。

但是,即使作为访客,也需要存储有关该访问者的某些信息(部分以防他们在未来创建帐户,但也只是为了让网站为他们运行),例如他们的首选货币、电子邮件(如果提供)、购物车及其内容,以及order_id(如果他们下了订单)

我的问题是以下哪种选择更适合处理此问题?

顺便说一句:我在这个项目中使用了 NodeJS。express-session

  1. 为所有新访客创建一个“用户”对象,并将user_id添加到会话中。在这种情况下,该用户对象将需要一个字段来区分两者,并且还需要一个字段,以便前端可以判断是加载登录表单还是配置文件页面,因为用户对象将始终存在。is_guest: true/falseis_logged_in: true/false

  2. 仅在通过注册表单注册帐户后创建“用户”对象,并存储有关购物车和电子邮件等的所有数据。而是用于会话对象上的来宾。

我可以看到两者的问题。1) 如果所有新访问者都创建一个用户对象,则可能会导致数据库非常大。2) 可能导致信息更加分散,会话对象变得杂乱无章(尤其是当购物车变大时)。我以前从未做过这样的事情,我会对任何关于反对或解决方案的想法,以及你认为最好的方法。

节点.js 快速会话

评论


答:

1赞 Lupina 11/6/2022 #1

这两种解决方案都很好,我已经看到两者都被使用。

我猜在数据库中存储东西更常见。由于无论如何您都可能会在数据库中记录用户交互,因此它不会占用更多数据。其次,使用相同的函数为登录和注销用户呈现页面稍微简单一些。

如果您不使用数据库,您可能希望使用 LocalStorage 而不是 cookie,因为 cookie 有大小限制(尽管很少有购物车会变得足够大以达到该限制)。