连接到不同主机

时间:2017-03-08 23:24:13

标签: ruby session websocket coffeescript

我正在向另一台主机上的API服务器发送websocket连接:

new WebSocket("ws://localhost:3000")

我的前端托管在localhost:8080

在我的API的websocket连接处理程序中,我能够在session(使用Sinatra' s enable :sessions)设置密钥,但每次刷新html页面,数据丢失。

对于前端与服务器共享同一主机的会话是否有一些要求?或者有什么方法可以解决这个问题?顺便说一下,前端正在Webpack服务器(Node)上运行。

我还尝试为API的根路由http://localhost:3000添加cross_origin允许值,然后在客户端中执行此操作(此示例在coffeescript中):

$.get "http://localhost:3000", ->
  new Websocket("ws://localhost:3000")

我的想法是,可能需要对会话进行初始化"超过http://代替ws://,但它也无效。该会话也不适用于$.get "http://localhost:3000"请求。刷新页面显示会话每次都清除。

1 个答案:

答案 0 :(得分:1)

正如我们在评论中讨论的那样,您可能在浏览器中遇到第三方会话Cookie问题。

这是一个可以用来解决它的方案。

  1. 客户端首次进行webSocket连接。
  2. 服务器发回webSocket消息,其中包含sessionID。
  3. 客户端将sessionID存储在第一方Cookie中(例如主机网页中的Cookie)。
  4. 用户点击刷新。
  5. 网页检查主机页面的cookie中是否有webSocket会话cookie。如果是这样,它构造一个webSocket连接的URL,其中包含该会话ID“new Websocket(" ws:// localhost:3000?session = xyslkfas")
  6. 当服务器接受webSocket连接时,它会检查查询参数以查看是否已指定会话。如果是,并且该会话仍然有效,则它将该连接挂接到该会话。如果没有,它会创建一个新会话并返回步骤2.