Node.js NodeJS-套接字内的访问会话
我花了2天时间通过套接字访问会话(登录用户) 我的mongodb中已经有用户了,我确实可以不用套接字(通过post或get)登录/注册他们。我现在所需要的是相同的插座 我已经尝试过这些解决方案: 花很多时间在谷歌上搜索。尝试不同的事情 我通常会遇到未定义的错误,或者不推荐的错误,或者没有错误就什么都不会发生 在遵循上面的教程并自己做了一些调整之后,我的代码从“难读”变为“太难读,必须从头开始”。所以我不会把我的代码放在这里Node.js NodeJS-套接字内的访问会话,node.js,session,login,socket.io,Node.js,Session,Login,Socket.io,我花了2天时间通过套接字访问会话(登录用户) 我的mongodb中已经有用户了,我确实可以不用套接字(通过post或get)登录/注册他们。我现在所需要的是相同的插座 我已经尝试过这些解决方案: 花很多时间在谷歌上搜索。尝试不同的事情 我通常会遇到未定义的错误,或者不推荐的错误,或者没有错误就什么都不会发生 在遵循上面的教程并自己做了一些调整之后,我的代码从“难读”变为“太难读,必须从头开始”。所以我不会把我的代码放在这里 相反,有人可以分享他们的关于访问套接字内会话所需的最低代码吗?如
相反,有人可以分享他们的关于访问套接字内会话所需的最低代码吗?如能提供解释,将不胜感激 更新 我接着说: 我有一些问题。它仍然不起作用。会话为空。我做错什么了吗?完整代码:
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);
var express=require(“express”);
var Server=require(“http”).Server;
var会话=需要(“快速会话”);
var redistore=require(“连接redis”)(会话);
var会议;
var-app=express();
var服务器=服务器(应用程序);
var sio=require(“socket.io”)(服务器);
var sessionMiddleware=会话({
存储:新的RedisStore(),
秘密:“键盘猫”,
雷萨夫:是的,
saveUninitialized:true
});
sio.use(功能(插座,下一个){
sessionMiddleware(socket.request,socket.request.res,next);
});
应用程序使用(sessionMiddleware);
应用程序获取(“/*”,函数(请求,恢复){
会话=请求会话
req.session.name=“THE name”;//对我来说效果很好:
app.js
:
var session = require("express-session");
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var sessionMiddleware = session({
secret: "keyboard cat",
resave: true,
saveUninitialized: true
});
app.use(sessionMiddleware);
app.use(function(req, res) {
req.session.name = "THE NAME";
res.sendFile(__dirname + "/index.html");
});
io.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
io.on("connection", function(socket) {
console.log('socket.io connection');
console.dir(socket.request.session);
// above outputs:
// socket.io connection
// { cookie:
// { path: '/',
// _expires: null,
// originalMaxAge: null,
// httpOnly: true },
// name: 'THE NAME' }
});
server.listen(8000);
index.html
:
var socket=io.connect('http://localhost:8000');
当socket.io连接建立时,会话数据尚未保存到Redis的时间可能存在问题?您可以尝试延迟socket.io连接,至少直到页面完全呈现为止(window.onload
)。如果我的问题不清楚,我可以根据您的反馈修改它:)在第二个链接上接受的答案应该可以正常工作。你应该实际发布你收到的错误,否则我们不知道建议什么…谢谢..我现在就做..等等..更新。有人能告诉我我是否做错了什么吗?检查-是否通过套接字建立了连接。io?谢谢你的帮助。延迟$(文档)。ready也没有解决问题……如果我找到任何解决方案,我会在这里发布。实际上,这对我来说非常有效,衷心感谢您!