2015-04-05 70 views
1

我正在Express服务器上使用SockJS。有没有办法获得客户端的相关HTTP会话ID?我如何获得(Express's)会话ID以用于SockJS连接

我看到有一种方法可以处理原始web socketSocket.io,但我正在努力寻找如何为SockJS做到这一点。

这是我的服务器的样子。我想类似的处理程序,以获取会话ID:

var sockjs_echo = sockjs.createServer(sockjs_opts); 
 
sockjs_echo.on('connection', function(conn) { 
 
    conn.on('data', function(message) { 
 
     conn.write(message); 
 
    }); 
 
});

+0

如果您使用redis来管理会话,我们的团队编写了一个库可能有帮助。 https://www.npmjs.com/package/node-token-sockjs。该库在连接时会将会话与套接字相关联,并将在所有RPC或发布 - 订阅操作中公开它。 – aembke 2015-06-23 18:49:02

回答

0

这是一个 “黑客”,但它为我工作:

sockjs_echo.on('connection', function(conn) { 

     var cookieHeader = conn._session.recv.ws._stream._readableState.pipes._driver._request.headers.cookie 
     var cookies = {} 
     cookieHeader.split(';').forEach(function(cookie) { 
      var parts = cookie.split('='); 
      cookies[parts.shift().trim()] = decodeURI(parts.join('=')); 
     }); 

     conn.on('data', function(message) { 
      conn.write(message); 
     }); 
    }); 

'曲奇' 变量(例如) :

{ 
    "dev_cookie": "1mimec6rbcolp0ujkcbqq9pdq4uoa5v0p8a284v32tmd4q3k0qi9p4vjteoifdn9b0lsm238fghf974o9jfehfuhvm3ltrgq02ad6k0", 
    "session_cookie": "s%3AjkKYPKFFT8r60rXUsVYISoOF17o49GUl.pbpu6T1%2BcdrIu5uQPRxZUYOrl5GnC179GaI5pWyR7SA", 
    "other_cookie": "s%3AzRMiC3fjo4gxTXX1p2XSi_C_EydIa358.KAdP1gwtZBVfcbkmwi%2B3pa0L1pbOCzQ3lHnNEyFvvHc" 
}