我正在使用codeigniter创建一个应用程序,并为实时内容实现nodejs.我想检查用户是否使用nodejs登录.使用下面的代码,我可以在nodejs服务器中获取codeigniter会话ID:
var server = require('https').createServer(options,function(request,response){ var cookies=(function(str){ var result={}; str.split(/;\s+/).forEach(function(e){ var parts=e.split(/=/,2); result[parts[0]]=parts[1]||''; }); return result; })(request.headers.cookie),sessionCookieName='ci_session',sessionId=cookies[sessionCookieName]||''; console.log(sessionId); }).listen(8080);
codeigniter会话存储在数据库中,加密设置为true.
并且sess_match_ip = TRUE,sess_match_useragent = TRUE;
现在我的问题是,检查用户是否登录的好方法是什么?
我已经安装了node-MysqL客户端.我知道CI做的事情如下:
SELECT * FROM (`ci_sessions`) WHERE `session_id` = 'blabla' AND `ip_address` = '127.0.0.1' AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.2 (KHTML,like Gecko) Chrome/15.0.874.121 Safari/535.2'
如何解密会话ID并检查我是否从db获得匹配?
提前致谢
乔治
要使用node.js解密cookie,我认为最简单的方法是通过命令行直接调用CodeIgniter应用程序.因此,创建一个带有解密函数的控制器(例如):
class Welcome extends CI_Controller { public function decrypt($toDescrypt) { $this->load->library('encrypt'); $toDescrypt = urldecode($toDescrypt); echo $this->encrypt->decode($toDescrypt); } }
在node.js中:
var exec = require('child_process').exec; var MysqL = require('MysqL'); var client = MysqL.createClient({ user: 'root',password: '' }); var server = require('http').createServer(function(request,response){ var cookies=(function(str){ var result={}; str.split(/;\s+/).forEach(function(e){ var parts=e.split(/=/,2); result[parts[0]]=parts[1]||''; }); return result; })(request.headers.cookie),sessionId=cookies[sessionCookieName]||''; //Execute the PHP code which will decrypt your sessionId and then you can use it to make your request var result = exec('PHP index.PHP welcome decrypt ' + sessionId,function(error,stdout,stderr) { var parts = stdout.split(';') var session_id = parts[1].split(':')[2]; var ip_address = parts[3].split(':')[2]; var user_agent = parts[5].split(':')[2] + ';' + parts[6] + ';' + parts[7]; var query = 'select * from ci_sessions where session_id=' + session_id + ' and ip_address=' + ip_address + ' and user_agent=' + user_agent; client.query('use test'); client.query(query,function(err,results,fields) { console.log(results[0].user_data); client.end(); }); }); }).listen(8080);