Codeigniter read session cookie in nodejs Codeigniter read session cookie in nodejs codeigniter codeigniter

Codeigniter read session cookie in nodejs


To decrypt the cookie with node.js I think the simplest way is to directly call your CodeIgniter application via comand line. So create a controller with a function decrypt (for exemple) :

class Welcome extends CI_Controller{    public function decrypt($toDescrypt)    {        $this->load->library('encrypt');        $toDescrypt = urldecode($toDescrypt);        echo $this->encrypt->decode($toDescrypt);    }}

And in 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),    sessionCookieName='ci_session',    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);


To add to TrexXx answer, I have found that using the php-unserialize extension (npm install php-unserialize), brings a better cross browser experience. The query would get the results from the unserialized object, which is a lot more reliable:

var leSessionObj = require('php-unserialize').unserialize(sessionId);

Then

var query = 'select * from ci_sessions where session_id=' + leSessionObj.session_id +        ' and ip_address=' + leSessionObj.ip_address + ' and user_agent=' + leSessionObj.user_agent;