使用Node.js解析CodeIgniter cookie

时间:2014-12-23 06:20:31

标签: javascript node.js socket.io

我试图用node.js解析CodeIgniter cookie。我使用此代码获取所有Cookie:

function parse_cookies(_cookies) {
   var cookies = {};

   _cookies && _cookies.split(';').forEach(function( cookie ) {
     var parts = cookie.split('=');
     cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim();
   });

   return cookies;
}

它返回所有cookie,然后我这样做:

var cookies = parse_cookies(handshakeData.headers.cookie);
console.log(cookies.ci_session);

但是ci_session cookie采用以下格式:

a:4:{s:10:"session_id";s:32:"152933dbf8a52a55b48518b940451aey";s:10:"ip_address";s:12:"192.168.1.68";s:10:"user_agent";s:72:"Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:34.0)+Gecko/20100101+Firefox/34.0";s:13:"last_activity";i:1419314157;}44503444ab1688f1e3a5ece6a3ff1e024e4b773f

如何从中获取session_id值?

1 个答案:

答案 0 :(得分:1)

这种格式看起来像PHP的serialize()功能。有一个 NPM Package 来解析这些。

如果您不想添加其他依赖项,并假设CodeIgniter的Cookie方案不会发生太大变化,您可以做一些简单的事情

cookies.ci_session.match(/s:32:"([a-z0-9]{32})"/)[1]

哪找到s:32:"(??)"的发生位置?是32个字母数字字符。 [1]是因为match()返回匹配数组,[0]是整个匹配(s:32:"(??)")而[1]是第一个捕获组(括在括号中) ),即??,这就是你想要的。