Express.session ミドルウェアは Cookie ベースのセッションを使用します。デフォルトでは、セッションはメモリにのみ保存され、データベースには保存されません。ユーザーが新しいタブを開いた場合、Cookie ベースのセッションは変更されません。この記事は SO の別の場所で言及されており、socket.io で高速セッションを使用するための良いリファレンスとして言及されています。一般に、socket.io ( sio.set('authorization', authCallback)
) で承認するときにセッションを確認するだけで済みますが、アプリはユーザーを適切な部屋に接続するように機能します。
更新:(Cookieを使用してユーザーをブロックする方法についてより具体的に)
// Var to save if the user is connected or not
var connectedUsers = [];
sio.authorization(function(data, next){
var cookie = data.headers.cookie && data.headers.cookie.match(/auth=([^;]+)/);
cookie = cookie && cookie[1] || null;
if (cookie && connectedUsers.indexOf(cookie)){
next(null, false);
}
else {
connectedUsers.push(cookie);
next(null, cookie);
}
});
// Somewhere else
socket.on('disconnect', function (data) {
var cookie = data.headers.cookie && data.headers.cookie.match(/auth=([^;]+)/);
cookie = cookie && cookie[1] || null;
if(cookie) {
connectedUsers.splice(connectedUsers.indexOf(cookie), 1);
}
});
これは、Cookie の値を取得するための非常に基本的な方法ですが、私にとってはうまくいきました。この解決策を試す時間がありませんでしたが、原則は機能するはずです。