EDIT 5экспресс-сессия не будет устанавливать куки connect.sid
меня назад и передний конец, работающие на LAMP-среде с 192.168.80.213/backend
Доступно адрес. Я пытаюсь сделать push-сервер уведомлений, используя nodejs, socket.io и express framework для связи назад и переднего конца.
Мой сервер nodejs прослушивает порт 3000
, в то время как мой бэкэнд и интерфейс прослушивают порт 80, используя apache.
Вот мой клиент узел:
<script type="text/javascript" src="socket.io-1.4.5.js"></script>
<script type="text/javascript">
var socket = io('http://192.168.80.213:3000/');
</script>
Вот мой узел сервера:
const express = require('express')
, app = express()
, http = require('http').Server(app)
, socketIo = require('socket.io')(http)
, cookieParser = require('cookie-parser')
, cookie = require('cookie')
, connect = require('connect')
, expressSession = require('express-session')
, port = 3000
, helmet = require('helmet')
, name = 'connect.sid'
, sessionStore = new expressSession.MemoryStore({ reapInterval: 60000 * 10 })
, sessionSecret = 'VH6cJa7yZSmkRbmjZW#J3%CDn%dt'
, environment = process.env.NODE_ENV || 'development'
;
/** Configuration **/
app.enable('trust proxy');
app.disable('x-powered-by');
app.use(helmet());
app.use(cookieParser());
app.use(expressSession({
'name' : name,
'secret': sessionSecret,
'store' : sessionStore,
'resave': true,
'saveUninitialized': true
}));
app.get('/', function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello from node');
});
socketIo.use(function(socket, callback) {
// Read cookies from handshake headers
var cookies = cookie.parse(socket.handshake.headers.cookie);
// We're now able to retrieve session ID
var sessionID;
if (cookies[name]) {
console.log("cookies['" + name + "'] = " + cookies[name]);
sessionID = cookieParser.signedCookie(cookies[name], sessionSecret);
console.log("sessionID = " + sessionID);
}else{
console.log("cookies['" + name + "'] = undefined");
}
if (!sessionID) {
console.log('ERROR NO SESSION CONNECTION REFUSED !!');
callback('No session', false);
} else {
// Store session ID in handshake data, we'll use it later to associate
// session with open sockets
socket.handshake.sessionID = sessionID;
callback(null, true);
}
});
socketIo.on('connection', function (socket) { // New client
console.log('new connection..');
console.log('user ' + socket.handshake.sessionID + ' authenticated and is now connected.');
});
/** Start server */
http.listen(port);
console.log("listening on :" + port);
Перейти к 192.168.80.213:3000
и увидеть 'Привет от узла' и печенье [ 'connect.sid'] является устанавливается в соответствии с скриншоте ниже
И Консоль вывода:
Теперь Очистка кэша и я иду к моей спине конца приложение, где находится мой nodeClient 192.168.80.213/backend
.
connect.sid печенья не существует
И консольный вывод:
Почему экспресс-сеанс не установлен cookie.sid? как я могу это исправить? Я новичок в узле и выражаю, я трачу много раз на поиски в Google без успеха, надеюсь, что некоторые помощники хозяев узла помогут мне!
С уважением
console.log (файлы cookie ['connect.sid']); output undefined, затем console.log (файлы cookie ['io']); вернуть что-то, почему файлы cookie ['connect.sid'] не определены? – akio
Уайт только этот код трудно узнать, откуда входит этот файл 'io'. Есть ли где-нибудь вы можете установить этот файл cookie? – dNitro
Что вам нужно? Весь мой код на стороне сервера выше, и я уверен, что я не устанавливаю никакого файла cookie в любом месте – akio