Express、express-session、および ws (websocket サポート用) で構築されたアプリケーションがあります。
このコードを使用して、セッション ミドルウェアを有効にしました。
app.use(session({secret: 'mysecret',resave: true,saveUninitialized: true,cookie: {}}));
また、get ハンドラー内でセッション変数を読み取って保存するには、次のようにします。
app.get('/', function (req, res) {
res.send('Hello World!');
console.log(req.session.test);
req.session.test="OK";
req.session.save();
});
(最初は「未定義」と出力され、2回目は期待どおり「OK」と出力されます)
これで、同じアプリ内でも Express によって処理される Websocket サーバーがあり、およびreq.session
内のオブジェクトを取得したいと考えています。ws.on("connection",...)
ws.on("message",...)
問題は、元のreq
オブジェクトへの参照がなくupgradeReq
、websocket の接続ハンドラーのラッパーである への参照があることです。この upgradeReq を調べると、セッション cookie の値を含むconnect.sid
を見つけることができます。ws.upgradeReq.headers.cookie
wss.on('connection', function connection(ws) {
var location = url.parse(ws.upgradeReq.url, true);
console.log(ws.upgradeReq.headers.cookie);
//....
});
req.session
私の考えでは、何らかの方法でこれからオリジナルを取得することが可能になる可能性があります.
どうすればこれを達成できますか?