Desidero condividere la sessione del server tra un'app NodeJs
e un'app PHP
utilizzando Redis
. Ho preso la maggior parte del codice da questo gist. CodiceCome condividere la sessione tra NodeJs e PHP usando Redis?
NodeJs:
app.use(session({
store: new RedisStore({prefix: 'session:php:'}),
name: 'PHPSESSID',
secret: 'node.js'
}));
app.use(function(req, res, next) {
req.session.nodejs = 'node.js!';
res.send(JSON.stringify(req.session, null, ' '));
});
Ed Uscite:
{
"cookie": {
"originalMaxAge": null,
"expires": null,
"httpOnly": true,
"path": "/"
},
"passport": {},
"nodejs": "node.js!"
}
codice PHP (io uso redis-session-php e Predis):
require('redis-session-php/redis-session.php');
RedisSession::start();
$_SESSION['php'] = 'php';
if (!isset($_SESSION["cookie"])) {
$_SESSION["cookie"] = array();
}
var_dump($_SESSION);
Ed Uscite:
array(2) {
["php"] => string(3) "php"
["cookie"] => array(0) { }
}
Il problema: mi si aspetterebbe entrambe le sessioni per lo stesso aspetto, ma non lo fanno (l'applicazione viene eseguita sullo stesso dominio). L'impostazione dei valori con set()
da Predis\Client
funziona (ma i valori non saranno sulla variabile di sessione). Ho trovato this code che penso avrebbe funzionato, usando set()
e get()
, ma ritengo che potrebbe complicare eccessivamente il codice.
Sai cosa sto facendo male?
qualcosa sembra pesce con il modulo i Redis php. Mi aspetto di vedere altre opzioni di configurazione per la connessione ai redis. puoi mostrarci la configurazione per PHP Redis (principalmente quello che stai passando nel costruttore – geggleto
Non sto passando nulla, per impostazione predefinita se non vengono passati argomenti si assume che sia '127.0.0.1' e '6379' come host predefinito e porta con un timeout di connessione di 5 secondi –
Wll nel tuo nodo.js stai passando una chiave segreta ... Non vedo l'opzione nel tuo codice per php. potrebbe essere che non si connette allo stesso negozio redis? – geggleto