Với phiên bản kết nối mới nhất (kể từ 2012-07-26), tôi đã tìm thấy cách sau để lấy ID phiên từ socket.io sẽ hoạt động với cửa hàng kết nối lại.kết nối socket.io parse (> = 2.4.1) cookie phiên đã ký
var express = require('express')
, routes = require('./routes')
, fs = require('fs')
, http = require('http')
, io = require('socket.io')
, redis = require('connect-redis')
, connect = require('express/node_modules/connect')
, parseSignedCookie = connect.utils.parseSignedCookie
, cookie = require('express/node_modules/cookie');
var secret = '...';
var rStore = new(require('connect-redis')(express));
//...
var server = http.createServer(app);
var sio = io.listen(server);
sio.set('authorization', function(data, accept) {
if(data.headers.cookie) {
data.cookie = cookie.parse(data.headers.cookie);
data.sessionID = parseSignedCookie(data.cookie['connect.sid'], secret);
} else {
return accept('No cookie transmitted', false);
}
accept(null, true);
});
data.sessionID
sau đó có thể được sử dụng sau này như
sio.sockets.on('connection', function(socket) {
console.log('New socket connection with ID: ' + socket.handshake.sessionID);
rStore.get(socket.handshake.sessionID, function(err, session) {
//...
});
});
Có phải nhập khẩu rất nhiều từ nhanh (kết nối, một tiện ích của kết nối, và các mô-đun cookie) có vẻ như một cách quá vòng xoay của nhận các chức năng cần thiết để phân tích các cookie đã ký của kết nối. Có ai tìm thấy một cách khác?
Tôi ước gì có thể upvote này 100 lần. Giải pháp của bạn ở trên đã tiết kiệm cho tôi rất nhiều thời gian, cảm ơn bạn đã đăng nó! Tôi xin lỗi tôi không thể đề nghị một cách khác. – LDK