在我发送一个不同的主机上的WebSocket连接到API服务器:连接到API时,没有持续会话不同的主机
new WebSocket("ws://localhost:3000")
而我的前端托管在localhost:8080
。
在我的API的websocket连接处理程序中我可以在session
(与Sinatra的enable :sessions
)上设置密钥,但每次刷新html页面时,数据都会丢失。
对于前端与服务器共享同一主机的会话是否存在一些要求?或者有什么方法可以解决这个问题?顺便说一句,前端运行在Webpack服务器(Node)上。
我也尝试添加一个cross_origin津贴API的根路径http://localhost:3000
,然后做这个客户端(在CoffeeScript的这个例子):
$.get "http://localhost:3000", ->
new Websocket("ws://localhost:3000")
我的想法是,也许需要的会议将“初始化“通过http://
而不是ws://
,但它也没有工作。该会话也不适用于$.get "http://localhost:3000"
请求。刷新页面显示会话每次都会清除。
会话将基于cookie,因此问题可能是会话cookie的持久性。当您使用与网页不同的主机/端口时,您的会话cookie就成为所谓的第三方cookie,并且第三方cookie有不同的安全规则和设置。我猜想你的设置或加载项阻止了第三方cookie的持久性。简单的webSockets本身可以很好地处理跨源连接,但是如果你在建立时试图附加一个会话cookie,那就需要持久化cookie。 – jfriend00
那么我要向客户端或服务器添加代码? –
您必须先查看第三方Cookie是否由您的客户保留。如果不是,那么您必须修复客户端中的设置,以保留它们或停止使用单独的来源,这样您就不会违反第三方Cookie设置。 – jfriend00