Reputation: 2269
I now know that MemCache does not work as I originally intended, but I am still not able to transmit user-specific data (such as the id of the member who is logged in) between PHP and Node.
I've only installed Memcache so far, but could install Redis as well if that's what I need, but I need some way of identifying a each logged in user based off of session or cookie data on both the Node and Apache (PHP) servers as they sign on.
I would prefer to not use a generic session id that is then used to reference a database, but I will if I must.
This was how I was storing in PHP
$memcache = new Memcache;
$memcache->connect('localhost',11211);
$uData = json_encode($_SESSION);
$memcache->set('Session',$uData);
This was my original Node file, which obviously will have to be changed significantly since I misunderstood Memcache's capabilities.
/*****************************************
* 1. Configuration
* 2. Declarations & Definitions
* 3. Memcache & Session Vars
* 4. Server Initiation
* 5. Client Connections
* 5-1. On Client Connect
* 6. Helper Functions
* 7. Utility Functions
*****************************************/
/*****************************************
* 1. Configuration
*****************************************/
// Basic config options
var NodePortNumber = 1337; // t3h 13370rz
var MemCachePortNumber = 11211; // default MemCache port is 11211
var MySQLParams = {
'Host': 'localhost',
'User': 'user',
'Pass': 'pass',
'DB': 'database'
};
/*****************************************
* 2. Declarations & Definitions
*****************************************/
var Express = require('express')();
var HTTP = require('http').Server(Express);
var IO = require('socket.io')(HTTP);
var MySQL = require('mysql');
var Database = MySQL.createConnection({
host : MySQLParams.Host,
user : MySQLParams.User,
password : MySQLParams.Pass,
database : MySQLParams.DB
});
/*****************************************
* 3. Memcache & Session Vars
*****************************************/
var MemCache, Session;
// Define a default value for all Session values so undefined warnings aren't thrown for non-members
Session = [];
Session['MemberID'] = 0;
Session['MemberEmail'] = undefined;
Session['MemberPass'] = undefined;
// Get session vars from Memcache
var Memcached = require('memcached');
MemCache = new Memcached('127.0.0.1:'+MemCachePortNumber); // connect to local memcached
MemCache.get('Session', function(err,result){
Session = JSON.parse(result);
});
/*****************************************
* 4. Server Initiation
*****************************************/
// Initiate the Node server
HTTP.listen(NodePortNumber, function(){
console.log('Server created. Socket listening on Port '+NodePortNumber);
});
/*****************************************
* 5. Client Connections
*****************************************/
var LiveClientCounter = 0; var Members = {};
var IsMember = false;
// Event fired every time a new client connects:
IO.sockets.on('connection', function (client) {
/*****************************************
* 5-1. On Client Connect
*****************************************/
var clientID = client.id;
LiveClientCounter++;
IO.emit('connection count', LiveClientCounter);
console.log('Member '+Session['MemberID'] +' connected');
if ( typeof Session['MemberID'] != typeof undefined && Session['MemberID'] > 0 ) {
IsMember = true;
if ( typeof Members[Session['MemberID']] == typeof undefined )
Members[Session['MemberID']] = [];
Members[Session['MemberID']][clientID] = {
SocketOBJ: client,
ClientID: clientID,
MemberID: Session['MemberID']
};
console.log('Key added for Member #'+Session['MemberID']);
}
});
Upvotes: 0
Views: 147
Reputation:
you cant do that
$memcache = new Memcache;
$memcache->connect('localhost',11211);
$uData = json_encode($_SESSION);
$memcache->set('Session',$uData);
each user will overwrite the session key.
you may do something like
$memcache = new Memcache;
$memcache->connect('localhost',11211);
$_SESSION['id'] = 'Session_' . phpsessionid();
$uData = json_encode($_SESSION);
$memcache->set($_SESSION['id'], $uData);
Then find a way so the node process knows about $_SESSION['id']
Upvotes: 1