我必须创建 2 个应用程序。一个应用程序是使用 express.js 和 socket.io 的服务器。第二个应用程序是一个简单的客户端(静态 html+js 文件),不能从服务器 express.js 实例中提供服务。express.sid
只有在访问 express.js 路由时才会创建用于建立会话的 cookie 。
当我使用 socket.io 从客户端(即http://client.addr)连接到服务器(即http://server.addr:0000)时出现我的问题 - 我无法建立 express.js 会话因为我没有访问服务器路由,也没有express.sid
会话 cookie。
我最终让客户端尝试向服务器/set-session-cookie
路由发送 AJAX 调用,希望我可以识别会话,发送回加密的 cookie,sessionID
然后启动 socket.io 连接挂接到在先前调用中创建的会话,但在 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');
第二个想法是只发回包含加密会话 id 的字符串并使用 JS 创建 cookie,但我无法找出res.cookie('express.sid2', req.sessionID, {signed: true});
手动执行加密算法的目的。
这种方法有效吗?如果有其他方法可以实现这一点,请告诉我。TIA。