简体   繁体   English

Node.js套接字会话

[英]Node.js socket session

i'am using node.js with sockets but how can i get my username out of my session? 我正在使用带有套接字的node.js,但是如何从会话中获取用户名?

Is this possible when i use only the packages of express and socket? 当我仅使用express和socket软件包时,这可能吗?

when i go to the login page i can choose a username. 当我进入登录页面时,我可以选择一个用户名。 when i click login i push my username in a session. 当我单击登录时,我在会话中推送我的用户名。 this works fine. 这很好。 But how can i use this session in my io.on("connection") ? 但是,如何在io.on(“ connection”)中使用此会话?

Thanks 谢谢

Kind Regards Johan 亲切的问候约翰

var express = require("express");
var app = express();
var http = require("http").createServer(app);
var session = require("express-session");
var io = require("socket.io")(http);
var bodyparser = require("body-parser");


app.set("view engine","ejs");
app.use(express.static(__dirname + "/public"));
app.use(bodyparser.urlencoded(true));
app.use(session({secret: "abc"}));

var serverSocket = io.listen(8060);

var users = [];





app.get("/",function (req, res) {
    if(req.session.username === undefined)
    {
        res.render("login",{error:null});
    }
    else
    {
        res.redirect("/chat");
    }

});


app.post("/login",function (req, res) {
    var username = req.body.username;
    var index = users.indexOf(username);
    console.log(index);

        if(index === -1)
        {
            users.push(username);
            req.session.username = username;
            res.redirect("/chat");
        }
        else
        {

            res.render("login",{logedIn: true,error: "gebruiker bestaat al"});
        }
});

app.get("/chat",function (req,res) {
   if(req.session.username === undefined)
   {
       res.render("login",{error:"u moet ingelogd zijn"});
   }
   else {

       res.render("chat");
   }
});


    io.on("connection",function (socket) {
        socket.username = session.username;
        var username = socket.username;

        socket.emit("connected",{username : session.username});


        socket.on("messageSend",function (data) {

           socket.emit("messageSend",{username : username,message:data.message});
        });


        socket.on("disconnect",function () {
            socket.username = null;
            console.log("diconnected");
        });
});






var server = http.listen(8050,function () {
   console.log(server.address().port);
});

socket.io-express-session library. socket.io-express-session库。 It's a very simple library that's a wrapper around socket.io. 这是一个非常简单的库,是socket.io的包装器。 All it does is grab session information during the handshake and then pass it to socket.io's connection function. 它所做的只是在握手过程中获取会话信息,然后将其传递给socket.io的连接功能。 You can access session via socket.handshake.session w/in connection listener. 您可以通过带有连接监听器的socket.handshake.session访问会话。

//instead of
io.sockets.on('connection', function (socket) {
//do pubsub here
...
})

var socketIOExpressSession = require('socket.io-express-session'); 
io.use(socketIOExpressSession(app.session)); // session support

//But with sessions.sockets.io, you'll get session info

/*
Use SessionSockets so that we can exchange (set/get) user data b/w sockets        and http sessions
Pass 'jsessionid' (custom) cookie name that we are using to make use of     Sticky sessions.
*/
var SessionSockets = require('session.socket.io');
var sessionSockets = new SessionSockets(io, sessionStore, cookieParser,     'jsessionid');

io.on('connection', function (socket) {

//get info from session
var user = socket.handshake.session.user;

//Close socket if user is not logged in
if (!user)
    socket.close();

//do pubsub
socket.emit('chat', {user: user, msg: 'logged in'});
...
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM