Почему express -session создает новый сеанс, когда приготовление сеанса ie уже существует? - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь понять основы файлов cookie / сеансов / сокетов для создания простой онлайн-игры. Для этой цели у меня есть идея использовать «express -session» для создания идентификатора сеанса для каждого игрока, который позже я могу использовать для идентификации каждого игрока, когда я перенаправляю их с одной страницы на другую, чтобы я мог идентифицировать каждая новая розетка с "предыдущими". Мой код приведен ниже, и у меня есть два вопроса:

Я провел тесты с использованием двух базовых c htmls, в которых одна кнопка перенаправляет вас на другой. Если браузер никогда не видел localhost (поэтому файлы cookie не регистрируются), файлы cookie создаются, и независимо от того, сколько раз я перенаправляю с одного веб-сайта на другой, идентификатор сеанса не меняется, что хорошо!

Первый вопрос: почему значение connect.sid cook ie не соответствует строке, которую я получаю в консоли с помощью console.log(req.cookies)?

Однако в тот момент, когда я вношу изменение в код, я остановить выполнение Node.js и перезапустить его, так как в браузере теперь есть "connect.sid" cook ie, по непонятной мне причине он постоянно создавал новый сеанс с каждым запросом. Вариант решения этой проблемы, о чем я читал, состоит в том, чтобы изменить хранилище на DB, например Mon go и Redis, но мой вопрос: если Cook ie уже существует с сеансом, почему нельзя Я использую это / есть способ сделать так, чтобы "express -session" знала об этом, чтобы использовать "прошлый сеанс"? Это происходит из-за того, что каждый раз, когда я перезапускаю сервер, хранилище «MemoryStore» отличается? И если это из-за этого, почему поведение меняется при использовании Redis или Mon go? Я действительно чувствую, что что-то упускаю, поэтому надеюсь, что кто-нибудь сможет прояснить мне эти вопросы, спасибо.

var express = require('express');
var app = express(); 
var serv = require('http').Server(app);
var cookieParser = require('cookie-parser');


// Middlewares
app.use(express.json()); 
app.use(cookieParser()); 

var session = require('express-session');
app.use(session({
    secret : 'Banana', 
    saveUninitialized : true, 
    resave : true, 
    cookie : { secure: false} // If HTTPS, then should be set to true
})); 

app.get('/', function(req, res) {
    console.log(req.cookies)
    res.sendFile(__dirname + '/client/index.html');
});

app.get('/second', function(req, res) {
    console.log(req.cookies)
    res.sendFile(__dirname + "/client/test.html")
})

serv.listen(2000);
...