Ich möchte die Serversitzung zwischen einer NodeJs
App und einer PHP
App mit Redis
teilen. Ich habe den Großteil des Codes von diesem gist genommen.Wie kann die Sitzung zwischen NodeJs und PHP mit Redis geteilt werden?
NodeJS Code:
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, ' '));
});
Und es gibt:
{
"cookie": {
"originalMaxAge": null,
"expires": null,
"httpOnly": true,
"path": "/"
},
"passport": {},
"nodejs": "node.js!"
}
PHP-Code (ich benutze redis-session-php und Predis):
require('redis-session-php/redis-session.php');
RedisSession::start();
$_SESSION['php'] = 'php';
if (!isset($_SESSION["cookie"])) {
$_SESSION["cookie"] = array();
}
var_dump($_SESSION);
Und es gibt:
array(2) {
["php"] => string(3) "php"
["cookie"] => array(0) { }
}
Das Problem: Ich würde erwarten, dass beide Sitzungen gleich aussehen, aber sie nicht (die App wird auf der gleichen Domäne ausgeführt). Das Setzen der Werte mit set()
von Predis\Client
funktioniert (aber die Werte werden nicht auf der Sitzungsvariablen sein). Ich fand this code, dass ich denke, würde funktionieren, mit set()
und get()
, aber ich denke, dass es den Code zu kompliziert würde.
Wissen Sie, was ich falsch mache?
etwas scheint mit dem die PHP-redis Modul fischig. Ich würde erwarten, einige Konfigurationsoptionen für die Verbindung zu Redis zu sehen. kannst du uns die config für die PHP Redis zeigen (hauptsächlich was du in den Konstruktor übergibst) – geggleto
Ich übergebe es nichts, standardmäßig geht es davon aus, dass wenn keine Argumente übergeben werden '127.0.0.1' und '6379' als Standard Host angenommen wird und Port mit einem Verbindungs-Timeout von 5 Sekunden –
Wll in Ihrem node.js übergeben Sie einen geheimen Schlüssel ... ich sehe nicht die Option in Ihrem Code für php. könnte es sein, dass es keine Verbindung zu demselben Redis-Speicher? – geggleto