是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)?
我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。
Express cookie解析器也已弃用。
https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/
NodeJS + ExpressJS +RedisStore会话未定义
如果有人可以发布一些最新的代码,那就太好了……
编辑-到目前为止的节点服务器代码摘录:
var express = require('express'), app = express(), server = require('http').createServer(app), io = require('socket.io').listen(server), redis = require('redis'), client = redis.createClient(); var session = require('express-session'), RedisStore = require('connect-redis')(session); app.get('/', function(req, res) { res.sendfile('/'); }); app.use( session({ name: 'PHPSESSID' store: new RedisStore({ prefix: 'PHPSESSID', port: 6379 }) }) ); io.sockets.on('connection', function (socket) { app.use(function(req, res, next) { console.log(req.session); }); .......
包装方式:
├─┬ connect@2.17.1 │ ├── basic-auth-connect@1.0.0 │ ├─┬ body-parser@1.2.0 │ │ └─┬ raw-body@1.1.4 │ │ └── bytes@0.3.0 │ ├── bytes@1.0.0 │ ├─┬ compression@1.0.2 │ │ ├── bytes@0.3.0 │ │ ├── compressible@1.0.1 │ │ └── negotiator@0.4.3 │ ├── connect-timeout@1.1.0 │ ├── cookie@0.1.2 │ ├── cookie-parser@1.1.0 │ ├── cookie-signature@1.0.3 │ ├─┬ csurf@1.2.0 │ │ ├── scmp@0.0.3 │ │ └── uid2@0.0.3 │ ├── debug@0.8.1 │ ├── errorhandler@1.0.1 │ ├─┬ express-session@1.2.0 │ │ ├── buffer-crc32@0.2.1 │ │ ├── uid2@0.0.3 │ │ └── utils-merge@1.0.0 │ ├── fresh@0.2.2 │ ├─┬ method-override@1.0.1 │ │ └── methods@1.0.0 │ ├── morgan@1.1.1 │ ├─┬ multiparty@2.2.0 │ │ ├─┬ readable-stream@1.1.13-1 │ │ │ ├── core-util-is@1.0.1 │ │ │ ├── inherits@2.0.1 │ │ │ ├── isarray@0.0.1 │ │ │ └── string_decoder@0.10.25-1 │ │ └── stream-counter@0.2.0 │ ├── on-headers@0.0.0 │ ├── parseurl@1.0.1 │ ├── pause@0.0.1 │ ├── qs@0.6.6 │ ├── response-time@1.0.0 │ ├── serve-favicon@2.0.0 │ ├─┬ serve-index@1.0.3 │ │ ├── batch@0.5.0 │ │ └── negotiator@0.4.3 │ ├─┬ serve-static@1.1.0 │ │ └─┬ send@0.3.0 │ │ ├── buffer-crc32@0.2.1 │ │ ├── debug@0.8.0 │ │ ├── mime@1.2.11 │ │ └── range-parser@1.0.0 │ ├─┬ type-is@1.2.0 │ │ └── mime@1.2.11 │ └── vhost@1.0.0 ├─┬ connect-redis@2.0.0 │ └── debug@0.8.1 ├─┬ express@4.1.1 │ ├─┬ accepts@1.0.1 │ │ ├── mime@1.2.11 │ │ └── negotiator@0.4.3 │ ├── buffer-crc32@0.2.1 │ ├── cookie@0.1.2 │ ├── cookie-signature@1.0.3 │ ├── debug@0.8.1 │ ├── escape-html@1.0.1 │ ├── fresh@0.2.2 │ ├── merge-descriptors@0.0.2 │ ├── methods@0.1.0 │ ├── parseurl@1.0.1 │ ├── path-to-regexp@0.1.2 │ ├── qs@0.6.6 │ ├── range-parser@1.0.0 │ ├─┬ send@0.3.0 │ │ ├── debug@0.8.0 │ │ └── mime@1.2.11 │ ├── serve-static@1.1.0 │ ├─┬ type-is@1.1.0 │ │ └── mime@1.2.11 │ └── utils-merge@1.0.0 ├─┬ express-session@1.2.0 │ ├── buffer-crc32@0.2.1 │ ├── cookie@0.1.2 │ ├── cookie-signature@1.0.3 │ ├── debug@0.8.1 │ ├── on-headers@0.0.0 │ ├── uid2@0.0.3 │ └── utils-merge@1.0.0 ├─┬ mysql@2.2.0 │ ├── bignumber.js@1.3.0 │ ├─┬ readable-stream@1.1.13-1 │ │ ├── core-util-is@1.0.1 │ │ ├── inherits@2.0.1 │ │ ├── isarray@0.0.1 │ │ └── string_decoder@0.10.25-1 │ └── require-all@0.0.8 ├── redis@0.10.2 └─┬ socket.io@0.9.16 ├── base64id@0.1.0 ├── policyfile@0.0.4 ├── redis@0.7.3 └─┬ socket.io-client@0.9.16 ├─┬ active-x-obfuscator@0.0.1 │ └── zeparser@0.0.5 ├── uglify-js@1.2.5 ├─┬ ws@0.4.31 │ ├── commander@0.6.1 │ ├── nan@0.3.2 │ ├── options@0.0.5 │ └── tinycolor@0.0.1 └── xmlhttprequest@1.4.2
对于节点(和Express 4.x):
从express-session的示例开始,但改用connect- redis作为会话存储。
示例代码:
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') > -1) 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' })); app.use(function(req, res, next) { req.session.nodejs = 'Hello from node.js!'; res.send(JSON.stringify(req.session, null, ' ')); }); app.listen(8080);
对于PHP:
使用redis会话处理程序,例如redis-session-php。
<?php // from https://github.com/TheDeveloper/redis-session-php require('redis-session-php/redis-session.php'); RedisSession::start(); $_SESSION["php"] = "Hello from PHP"; // `cookie` is needed by express-session to store information // about the session cookie if (!isset($_SESSION["cookie"])) $_SESSION["cookie"] = array(); var_dump($_SESSION); ?>
注意:请确保使用相同的prefix(connect-redis)/ REDIS_SESSION_PREFIX(redis-session- php)(默认情况下,connect-redis使用’sess:’,redis-session- php使用’session:php:’)和ttl(connect- redis)/ session.gc_maxlifetime(PHP)(如果使用redis数据库而不是默认数据库,则为同一数据库),用于redis-session-php和connect-redis。
prefix
REDIS_SESSION_PREFIX
ttl
session.gc_maxlifetime