Проблемы с сессиями express и socket.io - PullRequest
0 голосов
/ 24 апреля 2019

Кажется, я не могу обмениваться сессиями между express и socket io.Это работает, когда на локальном хосте, но не когда на моем сервере.Есть кое-что, чего мне не хватает.

Данные, которые я храню в socket.handshake.session (здесь 'age'), не сохраняются на экспресс-стороне.

Мой app.js выглядит так:

var cookieParser = require('cookie-parser');
var session = require('express-session');


var app = express();
app.use(cookieParser()); // read cookies (needed for auth)
var sessionMiddleware = session({
  secret: 'keyboard cat',
  resave: true,
  name: 'sessionId',
  saveUninitialized: true,
  cookie: { maxAge: 60000 },
  // store: new redisStore({ host: 'localhost', port: 6379, client: redisClient, ttl: 86400 }),
});
app.use(sessionMiddleware);
app.set("sessionMW", sessionMiddleware);


module.exports = app;

Мой bin \ www выглядит следующим образом:

var app = require('../app');
var debug = require('debug')('testserver:server');
var http = require('http');
var sharedsession = require("express-socket.io-session");

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

var server = http.createServer(app);

var io = require('socket.io').listen(server);


var session = app.get("sessionMW")

io.use(sharedsession(session, {autosave:true}));

server.listen(port);

Затем у меня есть serverEvent.js, который выглядит так:

var serverEvents = module.exports = function(io){
  io.sockets.on('connection', function (socket) {
...
...
...
 socket.on('updateAgeSession', function (message) {

        socket.handshake.session.age = "18";    
        socket.handshake.session.save();
         console.log(socket.handshake.session);
      })
})
}

И, наконец, у меня есть этот index.js длямои маршруты:

module.exports = function (app, passport) {

    // show the home page (will also have our login links)
    app.get('/', function (req, res, next) {

        res.cookie('mycookies', 'express');
        res.cookie('age', req.session.age);
        cookie1= req.cookies;

        console.log(req.session);
        console.log(req.sessionID);

        console.log(req.sessionStore.sessions);

        if (req.session.views) {
            req.session.views++;
            console.log(req.session.views);
          } else {
            req.session.views = 1
            console.log(req.session.views);
          }

          if(req.session.age){
              console.log("OOOOOOOOOOOOOOOOOO");
          } else {
            console.log("XXXXXXXXXXXXXXXXXXXXXX");
          }

        res.render('homePage'); // ejs template 
    });
}

Так что моя проблема в том, что после того, как я обновлю страницу, мне больше 18 лет, req.session.age будет неопределенным, но только когда мой код выполняется на сервере, онработает на локальном хостеЯ не понимаюПожалуйста, помогите

1 Ответ

0 голосов
/ 13 июня 2019

Для тех, у кого может быть та же проблема, что и у меня, вот решение:

У меня также есть код на стороне клиента, который выглядит так:

var socket = io.connect("http://ip:3000");
var globalVar = [];
// Sent on connection/searchValidatedFromClient by server
socket.on("loadHomePageFromServer", function(message) {
...}

Проблема была io.connect("http://ip:3000");.

Изменяя его на io.connect("http://namesite.com"); или io.connect("http://ip:80");, оно работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...