【问题标题】:Why doesn't Meteor have server-side sessions?为什么 Meteor 没有服务器端会话?
【发布时间】:2015-07-24 06:40:31
【问题描述】:

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

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

大多数 Web 框架在 cookie 中存储一个唯一的会话 ID,并且该 cookie 与每个请求一起发送到服务器,因此服务器始终可以识别发送请求的访问者 - 为什么不在 Meteor 中提供类似的功能?

看起来 Meteor 将 userId(如果已登录)保存在 localStorage 中,并通过 DDP 连接将该 userId 发送到服务器 - 但这仅在用户登录时才有帮助。为什么不对所有访问者通过会话ID?

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

【问题讨论】:

  • 你对流星不支持cookies你可以在这里阅读更多info.meteor.com/blog/session-cookies,你可以使用local storage保存你需要的任何信息。
  • 谢谢,该链接解释了为什么即使使用 localStorage 令牌也没有实现它。也许将购物车存储在 localStorage 中最有意义 - 尽管我真的希望在服务器端跟踪购物车,以便我可以轻松收集有关废弃购物车的数据。
  • 也许使用new Mongo.ObjectID() 生成一个id,将其保存在会话变量中,然后使用Mongo 集合中的文档将所有数据保存在其中。小心谨慎,最好使用一种方法来操作该数据。这样您就可以采取适当的安全措施。

标签: meteor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      相关资源
      最近更新 更多