【问题标题】:session synchronization between socket.io server and http server?socket.io服务器和http服务器之间的会话同步?
【发布时间】:2014-01-17 11:02:58
【问题描述】:

最近我在一个项目上工作,这是一个实时 Web 应用程序。

我使用socket.io作为数据服务器,假设它的域是www.a.com。另一方面,我使用express作为http服务器,它的域是www.b.com

现在问题来了,如果我想同步两个服务器之间的会话(也就是说,如果用户通过socket.io登录www.a.com,当他/她访问www.b.com时他/她已经登录),如何我可以这样做吗?

提前致谢:)

ps:请原谅我的英语不好...

== 更新 ==

我尝试了一种解决方案:使用postMessage 的魔力在不同的选项卡之间进行通信。

当用户登录www.a.com 时,我创建一个iframe,其src 引用www.b.com。然后我可以将登录数据从www.a.com 传递到www.b.com,并触发一些东西来登录www.b.com

但我认为这不是解决问题的最佳方法,安全吗?或产生其他问题?我想知道是否还有其他解决方案。

【问题讨论】:

    标签: node.js session socket.io multiserver


    【解决方案1】:

    就其性质而言,cookie(存储会话 ID)无法从不同的域中读取。我知道 Apache 的一个 mod 可以加密来自一个域的登录数据并将其放在 GET 请求(地址栏)中,这样用户就不必登录到第二个域。抱歉,我不记得它叫什么了,但你可以做类似的事情,我相信你只需要 require('crypto')。

    编辑:为什么要让套接字和 Web 服务器在不同的域上运行?如果他们在同一个域上运行,我相信有一个模块可以让 sockets.io 获取会话数据。我自己没用过,随便看看吧。

    【讨论】:

    • 提前感谢您的回答。
    • 我没有在socket.io中使用cookie,我通过sid(保存在localStorage)来恢复用户的数据。所以我不知道crypto 在这种情况下是否可以帮助我。我有不同的域,因为他们有不同的业务..
    猜你喜欢
    • 2016-12-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多