2016-01-19 5 views
0
io.use(function(socket, next){ 
    signedCookieParser(socket.request, null, function(err){ 
     if(err){ 
      console.log('err parse'); 
      return next(new Error("cookie err")); 
     } 
     var connect_sid = socket.request.signedCookies['connect.sid'] 
     console.log('connect_sid'+connect_sid); 
     if (connect_sid) { 
     //通过cookie中保存的session的id获取到服务器端对应的session 
      sessionStore.load(connect_sid, function(error, session){ 
       if (error) { 
        return next(new Error('Authentication error')); 
       } 
       else { 
        // save the session data and accept the connection 
        socket.request.session = session; 
        next(); 
      } 
     }); 
    } 
    }) 
}) 

я использовать последние версии (1.4.4), и использовать этот метод, чтобы сохранить сессию, но я не могу получить сеанс со следующим методом:socket.handshake не может получить сеанс

io.sockets.on('connection', function(socket){ 
    var session = socket.handshake.session; //undefined 
} 

ответ

0

я решил этот вопрос, но я не знаю, почему.

io.use(function(socket, next){ 
signedCookieParser(socket.request, null, function(err){ 
    if(err){ 
     console.log('err parse'); 
     return next(new Error("cookie err")); 
    } 
    var connect_sid = socket.request.signedCookies['connect.sid'] 
    console.log('connect_sid'+connect_sid); 
    if (connect_sid) { 
    //通过cookie中保存的session的id获取到服务器端对应的session 
     sessionStore.load(connect_sid, function(error, session){ 
      if (error) { 
       return next(new Error('Authentication error')); 
      } 
      else { 
       // save the session data and accept the connection 
       //socket.request.session = session; 
       socket.request.headers.session = session; 
       next(); 
     } 
    }); 
} 
}) 

})

мы себе Информация о сеансе т в socket.request.headers и мы получаем его от socket.handshake.headers

io.sockets.on('connection', function(socket){ 
     var session = socket.handshake.headers.session; // it works 
} 

это все.

Смежные вопросы