Я пытаюсь установить идентификатор сеанса cook ie в своем клиентском приложении реакции. Как-то это не работает, и все, что я получаю, это стандартный сеанс готовить ie в браузере.
С другой стороны, он работает с файлом stati c serve HTML, который создает сокет .io соединение.
Вот мой код на стороне сервера:
var app = require("express")();
var server = require('http').Server(app);
var io = require('socket.io')(server);
let expressSession = require('express-session');
let sharedsession = require("express-socket.io-session");
var path = require('path');
var host = 'process.env.HOST' || '0.0.0.0';
var port = process.env.PORT || 4000;
server.listen(port, host, function () {
console.log("Server running on: " + host + " : " + port);
});
if (process.env.NODE_ENV === 'production') {
//Set static folder
app.use(require('express').static('client/build'));
}
let session = expressSession({
secret: 'my-secret',
//store: new redisStore({ host: 'localhost', port: 6379, client: redis, ttl: 260}),
resave: true,
saveUninitialized: true,
cookie: {
maxAge: 10000,
httpOnly: true,
sameSite: true,
secure: true,
},
})
app.use(function(req, res, next) {
res.header('Content-Type', 'application/json;charset=UTF-8')
res.header('Access-Control-Allow-Credentials', true)
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept'
)
next()
})
app.use(session);
io.use(sharedsession(session, {
autoSave: true
}));
io.on('connection', function (socket) {
console.log(`socket with id ${socket.id} connection established`);
socket.handshake.session.userdata = Math.random();
socket.handshake.session.save();
console.log(socket.handshake.sessionID);
client:
let socket = io(serverIP, { autoConnect: false });
useEffect(() => {
socket.on("connect", () => {
console.log("Connected");
});
socket.open();
}, []);
в простом HTML файле, подобном этому, сессия готовит ie устанавливается:
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
socket = io();
В обоих случаях используется HTTP. Соединение сокета также устанавливается с обоими вариантами, и io cook ie устанавливается. А приложение реакции создается и обслуживается из папки сборки.
Чего мне не хватать? Спасибо за любой совет!
РЕДАКТИРОВАТЬ С 02.03.2019 :
Как оказалось, ошибка может быть вызвана отсутствующим запросом или чем-то еще. Когда я использую локальный socket.io. js, непосредственно добавленный к HTML, все работает отлично. Если я использую socket.io-клиент, напрямую импортированный из моего приложения реакции или внешнего CDN, это не сработает. Похоже, это работает только после того, как я запросил местный ресурс. Кто-нибудь знает, в чем может быть разница между этими двумя подходами и что может быть причиной такого поведения?