Sunting: Setelah mencoba beberapa modul yang tidak berfungsi, saya benar-benar pergi dan menulis perpustakaan saya sendiri untuk melakukan ini. Steker yang tidak tahu malu: periksa di https://github.com/aviddiviner/Socket.IO-sessions . Saya akan meninggalkan posting lama saya di bawah ini untuk tujuan sejarah:
Saya mendapat pekerjaan ini cukup rapi tanpa harus bypass flashsocket transportasi sesuai pr0zac 's solusi di atas. Saya juga menggunakan express dengan Socket.IO. Begini caranya.
Pertama, teruskan ID sesi ke tampilan:
app.get('/', function(req,res){
res.render('index.ejs', {
locals: {
connect_sid: req.sessionID
// ...
}
});
});
Kemudian dalam tampilan Anda, tautkan dengan sisi klien 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'});"/>
Kemudian di pendengar Socket.IO sisi server Anda, ambil dan baca / tulis data sesi:
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
});
});
});
Dalam kasus saya, saya session_store
adalah Redis, menggunakan redis-connect
perpustakaan.
var RedisStore = require('connect-redis');
var session_store = new RedisStore;
// ...
app.use(express.session({ store: session_store }));
Semoga ini membantu seseorang yang menemukan posting ini saat mencari Google (seperti yang saya lakukan;)