我试图用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值?
答案 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]
是第一个捕获组(括在括号中) ),即??
,这就是你想要的。