Chỉnh sửa: Sau khi thử một số mô-đun không hoạt động, tôi đã thực sự đi và viết thư viện của riêng mình để làm điều này. Trình cắm không biết xấu hổ: hãy khám phá tại https://github.com/aviddiviner/Socket.IO-sessions . Tôi sẽ để lại bài đăng cũ của mình bên dưới cho các mục đích lịch sử:
Tôi đã làm việc này khá gọn gàng mà không cần phải bỏ qua các flashsocket vận chuyển theo pr0zac giải pháp của ở trên. Tôi cũng đang sử dụng express với Socket.IO. Đây là cách thực hiện.
Đầu tiên, chuyển ID phiên vào chế độ xem:
app.get('/', function(req,res){
res.render('index.ejs', {
locals: {
connect_sid: req.sessionID
// ...
}
});
});
Sau đó, trong chế độ xem của bạn, hãy liên kết nó với phía máy khách Socket.IO:
<script>
var sid = '<%= connect_sid %>';
var socket = new io.Socket();
socket.connect();
</script>
<input type="button" value="Ping" onclick="socket.send({sid:sid, msg:'ping'});"/>
Sau đó, trong trình nghe Socket.IO phía máy chủ của bạn, chọn nó và đọc / ghi dữ liệu phiên:
var socket = io.listen(app);
socket.on('connection', function(client){
client.on('message', function(message){
session_store.get(message.sid, function(error, session){
session.pings = session.pings + 1 || 1;
client.send("You have made " + session.pings + " pings.");
session_store.set(message.sid, session); // Save the session
});
});
});
Trong trường hợp của tôi, tôi session_store
là Redis, sử dụng redis-connect
thư viện.
var RedisStore = require('connect-redis');
var session_store = new RedisStore;
// ...
app.use(express.session({ store: session_store }));
Hy vọng điều này sẽ giúp ai đó tìm thấy bài đăng này trong khi tìm kiếm trên Google (như tôi đã làm;)