2016-12-15 2 views
0

Теперь я знаю, что MemCache не работает так, как я изначально планировал, но я по-прежнему не могу передавать данные, специфичные для пользователя (например, идентификатор член, который входит в систему) между PHP и узлом.Как отправить пользовательские данные между PHP и узлом с помощью MemCache или Redis

Я до сих пор только установил Memcache, но смог установить Redis, если это то, что мне нужно, но мне нужен способ идентификации каждого зарегистрированного пользователя на основе данных сеанса или файла cookie как на узле, так и на Apache (PHP), когда они подписываются.

Я бы предпочел не использовать общий идентификатор сеанса, который затем используется для ссылки на базу данных, но я буду, если должен.

Это был, как я хранил в PHP

$memcache = new Memcache; 
$memcache->connect('localhost',11211); 
$uData = json_encode($_SESSION); 
$memcache->set('Session',$uData); 

Это был мой первоначальный узел файл, который, очевидно, должен быть существенно изменен, так как я понял возможности MemCache в.

/***************************************** 
* 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']); 
    } 

}); 

ответ

1

вы косяк делать

$memcache = new Memcache; 
$memcache->connect('localhost',11211); 
$uData = json_encode($_SESSION); 
$memcache->set('Session',$uData); 

каждый пользователь будет перезаписывать ключ сеанса.

вы можете сделать что-то вроде

$memcache = new Memcache; 
$memcache->connect('localhost',11211); 
$_SESSION['id'] = 'Session_' . phpsessionid(); 
$uData = json_encode($_SESSION); 
$memcache->set($_SESSION['id'], $uData); 

Затем найти способ, чтобы процесс узел знает о $ _SESSION [ «ID»]

+0

Не могли бы вы добавить пример того, как передавать эти данные? Я думал о переменной GET, но, похоже, было бы лучше. – SISYN

Смежные вопросы