为什么Meteor没有服务器端会话?

时间:2015-07-23 21:25:41

标签: meteor

我想用Meteor创建一个购物车,允许未登录的访客拥有持久的购物车。

据我所知,在Meteor中跟踪未登录访问者的唯一方法是在客户端(localStorage)上设置持久ID,然后在每个订阅和方法调用中传递该ID。

大多数Web框架在cookie中存储唯一的会话ID,并且每次向服务器发送请求时都会发送cookie,因此服务器始终可以识别发送请求的访问者 - 为什么在Meteor中没有类似的功能? / p>

看起来Meteor在localStorage中持久存在userId(如果已登录)并通过DDP连接将该userId发送到服务器 - 但这仅在用户登录时有用。为什么不对所有访问者完成此操作通过sessionId?

我在这里遗漏了什么吗?欢迎使用其他技术 - 我只想清理我的代码而不必在任何地方传递sessionId。

2 个答案:

答案 0 :(得分:0)

我猜测购物车是您的用户集合架构中的一个字段。

相反,将Cart设为自己的集合,并将userID作为外键。

然后,如果用户未登录,您可以使用localStorage令牌作为ID:localStorage.getItem('Meteor.loginToken')

最后,当用户注册时,在您的createUser回调中,您会搜索带有该令牌的购物车。如果存在,请将其更新为新的userId。

对于分析而言,这也快一点,因为您不必遍历整个用户集合来获取购物车对象。

答案 1 :(得分:0)

你对流星不支持你可以在这里阅读更多http://info.meteor.com/blog/session-cookies的cookie,我的建议是使用本地存储来保存客户端而无需登录。另请参阅如何在javascript Create GUID / UUID in JavaScript?

中创建UUID

//我先评论并在此发布,因为我认为这是我的两分钱的答案。