socket.io 内のセッション変数にアクセスするという悪名高い問題を解決しようとしています。基本的に、このトピックに関する Google のすべてのリンクを読みましたが、まだ苦労しています。
すべてのルーティングの後、私はこれを持っています:
io.set('authorization', function(data,accept)
{
data.cookie = cookie.parse(data.headers.cookie);
---> console.log(data.cookie);
data.sessionID = connect.utils.parseSignedCookie(data.cookie['express.sid'].split('.')[0].substring(2), conf.sessionSecret);
sessionStore.get(data.sessionID, function (err, session)
{
console.log(session);
});
});
残念ながら、矢印を描いたconsole.logはこれを返します:
{ 'connect.sid': 's:3pIi31DPthO8KVOjqzYpeL75.nHvKOpMZsUsyto7CtBJgcJZIiBSN+IC2/aD0GcfYftU' }
もちろん、express.sid が未定義であるというエラーが表示されます。Express.sid を connect.sid に変更すると、セッション変数が未定義になります。
私はこの問題を解決するのに本当に苦労しています-私は数時間それに取り組んできました. 何か助けはありますか?
編集:解決した問題を要約するには:
- app.config では、セッションの代わりに cookieSession を使用していました
- 私のクライアントは、サーバーのポート転送された外部 IP バージョンに接続していました。これは Cookie データを持っていませんでした。
- .split('.')[0].substring(2) は、セッションIDを見つけるときに絶対に必要です
- io.set('authorization, function (handshake,callback) の最後に ... socket.io 接続が正常に進行するためには、「callback(null,true)」を呼び出す必要があります