¿Cómo compartir sesión entre NodeJs y PHP usando Redis?

Quiero compartir la sesión del servidor entre una aplicación NodeJs y una aplicación PHP usando Redis . Tomé la mayor parte del código de esta esencia .

Código de 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, ' ') ); }); 

Y produce:

 { "cookie": { "originalMaxAge": null, "expires": null, "httpOnly": true, "path": "/" }, "passport": {}, "nodejs": "node.js!" } 

Código PHP (uso redis-session-php y Predis ):

 require('redis-session-php/redis-session.php'); RedisSession::start(); $_SESSION['php'] = 'php'; if (!isset($_SESSION["cookie"])) { $_SESSION["cookie"] = array(); } var_dump($_SESSION); 

Y produce:

 array(2) { ["php"] => string(3) "php" ["cookie"] => array(0) { } } 

El problema: espero que ambas sesiones tengan el mismo aspecto, pero no (la aplicación se ejecuta en el mismo dominio). Establecer los valores con set() desde Predis\Client funciona (pero los valores no estarán en la variable de sesión). Encontré este código que creo que funcionaría, usando set() y get() , pero creo que complicaría demasiado el código.

¿Sabes lo que estoy haciendo mal?

Soy el autor de la esencia. El código funcionó hasta express-session comenzó a forzar las cookies firmadas y comenzó a implementarlas de una manera diferente.

He actualizado la esencia para trabajar con la última versión de express-session . Una copia de la esencia sigue por conveniencia:

app.js:

 var express = require('express'), app = express(), cookieParser = require('cookie-parser'), session = require('express-session'), RedisStore = require('connect-redis')(session); app.use(express.static(__dirname + '/public')); app.use(function(req, res, next) { if (~req.url.indexOf('favicon')) return res.send(404); next(); }); app.use(cookieParser()); app.use(session({ store: new RedisStore({ // this is the default prefix used by redis-session-php prefix: 'session:php:' }), // use the default PHP session cookie name name: 'PHPSESSID', secret: 'node.js rules', resave: false, saveUninitialized: false })); app.use(function(req, res, next) { req.session.nodejs = 'Hello from node.js!'; res.send('
' + JSON.stringify(req.session, null, ' ') + '

'); }); app.listen(8080);

app.php:

 "; echo json_encode($_COOKIE, JSON_PRETTY_PRINT); echo json_encode($_SESSION, JSON_PRETTY_PRINT); echo "

"; ?>