【发布时间】:2015-11-08 14:26:30
【问题描述】:
我花了 2 天时间通过套接字访问会话(登录用户)。
我的 mongodb 中已经有用户,我确实可以在没有套接字的情况下登录/注册他们(通过 post 或 get)。我现在需要的只是套接字。
我已经尝试过这些 SO 解决方案:
socket.io and express 4 sessions
How to share sessions with Socket.IO 1.x and Express 4.x?
并花费大量时间在谷歌上搜索。并尝试不同的东西。
我通常会收到未定义的错误,或已弃用的错误,或者没有任何错误发生。
按照上面的教程,并自己做了一些调整后,我的代码从“难以阅读”变成了“太难以阅读,必须从头开始”。所以我不会在这里放我的代码。
相反,有人可以分享他们的 bare-minimum 代码,了解如何访问套接字内的会话吗?如有解释将不胜感激。
更新 我跟着这个:How to share sessions with Socket.IO 1.x and Express 4.x?
我遇到了一些问题。它仍然不起作用。会话是空的。难道我做错了什么?完整代码:
var express = require("express");
var Server = require("http").Server;
var session = require("express-session");
var RedisStore = require("connect-redis")(session);
var SESSION;
var app = express();
var server = Server(app);
var sio = require("socket.io")(server);
var sessionMiddleware = session({
store: new RedisStore(),
secret: "keyboard cat",
resave: true,
saveUninitialized: true
});
sio.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
app.use(sessionMiddleware);
app.get("/*", function(req, res){
SESSION = req.session
req.session.name="THE NAME"; // <<<< SHOULDN'T THIS WORK? ITS UNDEFINED
if(req.path=="/"){
res.sendFile(__dirname+"/index.html");
}else{
res.sendFile(__dirname+req.path);
};
});
sio.sockets.on("connection", function(socket) {
SESSION = socket.request.session
console.log("The SESSION variable on socket connection:");
console.log(SESSION); //<<<<<<<<<<<< UNDEFINED
socket.on("get session status",function(){
socket.emit("session status",{ SESSION:SESSION }); // <<<<< EMPTY OBJECT
})
});
server.listen(80);
【问题讨论】:
-
如果我的问题不清楚,我可以根据您的反馈随意修改:)
-
第二个链接中接受的答案应该可以正常工作。您实际上应该发布您遇到的错误,否则我们不知道该建议什么...
-
谢谢..我现在就做..等等..
-
已更新。谁能告诉我我做错了什么?
-
检查-是否通过socket.io建立连接?
标签: node.js session login socket.io