如何通过socket.io对象访问express.session.MemoryStore?

我正在做一个loginfunction

app.post('/teacherlogin', function(request, response) { var username = request.body.username; var password = request.body.password; con.query('SELECT t_id from login_teacher where username="'+username+'" and password="'+password+'"',function(err,results){ if(results.length > 0) { request.session.regenerate(function(){ request.session.user = username; request.session.type = 'teacher'; request.session.id = results[0].t_id; response.redirect('/teacherhome'); }); } else { response.redirect('teacherlogin'); } }); }); 

现在我想发出我已经存储到会话对象的'id'和'type'。 我应该怎么做? 我读过这篇文章,但没有经验,我正面临使用它的困难。 我已经在我的代码中使用它了

 var MemoryStore = express.session.MemoryStore; var sessionStore = new MemoryStore(); app.use(express.bodyParser()); app.use(express.cookieParser('secret text')); app.use(express.session({ store: sessionStore, secret: 'secret', key: 'express.sid'} )); 

 var Session = require('connect').middleware.session.Session; io.set('authorization', function (data, accept) { if (data.headers.cookie) { data.cookie = require('cookie').parse(data.headers.cookie); data.sessionID = data.cookie['express.sid'].split('.')[0]; console.log('data.sessionID "'+data.sessionID); data.sessionStore = sessionStore; sessionStore.get(data.sessionID, function (err, session) { if (err || !session) { accept('Error', false); } else { data.session = new Session(data, session); accept(null, true); } }); } else { return accept('No cookie transmitted.', false); } }); 

会议对象中没有任何东西。 我试图loggingsessionStore的内容,它似乎是空的! 这是否意味着我在会话中存储的信息没有存储在sessionStore中? 如果是的话,我应该怎么做呢? 如果它存储在那里为什么sessionStore.get函数不能find它?

我不知道你是否还在这个工作,但你可以访问只有一个MemoryStore的会话数据。 毕竟如果没有工作,Express将如何使用它? 🙂

演示MemoryStore工作的一个简单方法是:

 var express = require("express") , app = express() , sessionStore = new express.session.MemoryStore(); // middleware app.use(express.cookieParser()); app.use(express.session({store: sessionStore, secret: "mysecret"})); // any endpoint sets a cookie app.get("/", function(req,res) { res.send('ok'); }); // This endpoint reveals it app.get("/session", function(req, res){ sessionStore.get(req.sessionID, function(err, data) { res.send({err: err, data:data}); }); }); app.listen(3000); 

/后跟/session结果的回应是:

 { "err": null, "data": { "cookie": { "originalMaxAge": null, "expires": null, "httpOnly": true, "path": "/" } } } 

我怀疑你的问题可能是你如何从套接字获取sessionID,但是从MemoryStore中提取一个会话是绝对有可能的。 另外,请记住,重新启动Express服务器将会销毁所有会话,因此每次重新启动后都需要一个新的cookie。

您必须使用数据库来存储您的快速会话,然后parsingso​​cket.io定义中的cookie数据,并将获得的信息从数据库中获取会话信息,这里是一个完整的示例:

https://stackoverflow.com/a/13098742/218418

您还可以使用从Cookieparsing的会话ID,并将用户join到具有会话名称的“聊天室”中。