我正在尝试使用 express 中间件进行会话(我不明白,但我觉得我很接近)。
我最终问的原因是快递文档(http://expressjs.com/api.html#middleware)将其称为 express.cookieSession ,而其他所有人(主要在这里)我已经看到讨论它一直在调用它express.session。我现在真的不确定,我只有一大堆可能有用的代码???但我看到的每个例子都是不同的......它是如何工作的?
var express = require('express')
, http = require('http');
, app = express();
store = new express.session.MemoryStore;
app.use(express.cookieParser());
//app.use(express.cookieSession());
app.use(express.session({secret:'whateverman',key:'express.sid',store:store}));
app.use(app.router);
app.all('/*',function(req,res,next){res.header("Access-Control-Allow-Origin","*");res.header("Access-Control-Allow-Headers","X-Requested-With");next();});
var server = http.createServer(app);
server.listen(8000);
var io = require('socket.io').listen(server);
io.sockets.on('connection',function(socket){
socket.on('reglogin',function(_){_.session.e='some@email.com';});
});
socket.on('reglogin' 产生:
TypeError:无法设置未定义的属性“e”
//-------------------------------问题更新
如果 express 依赖于 connect 但 express 可以访问连接中间件,就好像它是它自己的一样,例如:
app.use(express.cookieSession()); //app is express
app.use(connect.cookieSession()); //does exactly the same
那么同样的逻辑肯定会适用于依赖于 express 的 socket.io:
io.use(connect.CookieSession()); //io is socket.io
我在这里错了吗?Socket.io 有相同的 .use 方法吗?更新:(对 io.use 的回答是否定的)
io.interoperate(app.use(express.cookieSession())); 哈哈
- - - - - - - - - - - - - - 更新 - - - - - - - - - - - ------------ 我在绝望的尝试中遵循了以下 npm 模块指南,以使会话正常工作并在每次握手时都归档,没有 cookie:
express.io session.socket.io session.io + sessionstore
当前将后者与控制台日志一起使用:
warn - handshake error Could not find cookie with key: connect.sid