express.js + socket.io – 如何从客户端应用程序初始化服务器上​​的会话

我必须创build2个应用程序。 一个应用程序是使用express.js和socket.io的服务器。 第二个应用程序是一个简单的客户端(静态html + js文件),不能从服务器express.js实例中提供。 只有当express.js路由被访问时,才使用cookie express.sid来build立会话。

我使用socket.io从客户端(即http://client.addr )连接到服务器(即http://server.addr:0000 )时出现问题 – 我无法build立express.js会话因为我没有访问服务器路由,我没有express.sid会话cookie。

我结束了与客户端尝试发送AJAX调用服务器/set-session-cookie路由希望我可以识别会话,发送encryptionsessionID cookie和启动socket.io连接挂钩到在以前的调用中创build的会话,但AJAX调用后不会发送cookie。

服务器路由:

 app.all('/set-sesion-cookie', function(req, res){ res.header('Access-Control-Allow-Origin', req.headers.origin); res.header('Access-Control-Allow-Credentials', 'true'); res.cookie('express.sid2', req.sessionID, {signed: true}); res.send(200); }); 

客户电话:

 $.post('http://127.0.0.1:3000/set-sesion-cookie'); 

第二个想法是只发送包含encryption会话ID的string,并使用JS创buildcookie,但是我找不到encryptionalgorithm是什么res.cookie('express.sid2', req.sessionID, {signed: true}); 做手动。

这种方法是否有效? 如果还有其他方法可以达到这个目的,请告诉我。 TIA。

根据安全原因,恕我直言,会话cookie应该仅限于HTTP。 这意味着这个cookie没有脚本支持。

您可以通过在nginx后面提供具有nginx和反向代理node.js应用程序的静态文件来避免同源策略问题。 这种方式都来自一台服务器,你没有共享一个cookie /会话ID的问题。

AFAIK Apache httpd不能代理WebSocket调用。

另一个可能的解决方法,而不是nginx可能是HAProxy 。