gpt4 book ai didi

php - 如何使用 MemCache 或 Redis 在 PHP 和 Node 之间发送用户特定的数据

转载 作者:可可西里 更新时间:2023-11-01 11:18:23 27 4
gpt4 key购买 nike

我现在知道 MemCache 没有像我最初预期的那样工作,但我仍然无法在 PHP 和 Node 之间传输用户特定的数据(例如登录的成员(member)的 id)。

到目前为止,我只安装了 Memcache,但如果我需要的话,也可以安装 Redis,但我需要一些方法来根据 Node 和 Apache 上的 session 或 cookie 数据来识别每个登录用户( PHP) 服务器,因为他们登录。

我宁愿不使用随后用于引用数据库的通用 session ID,但如果必须的话,我会这样做。

这就是我在 PHP 中存储的方式

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

这是我的原始 Node 文件,由于我误解了 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']);
}

});

最佳答案

你不能那样做

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

每个用户都会覆盖 session key 。

你可以做类似的事情

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

然后想办法让 Node 进程知道$_SESSION['id']

关于php - 如何使用 MemCache 或 Redis 在 PHP 和 Node 之间发送用户特定的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com