Было очень просто настроить сеансы и использовать их в php. Но мой веб-сайт должен иметь дело с веб-сайтами. Я столкнулся с проблемой настройки сеансов в node.js. Я могу легко переносить данные, не используя сеансы, и это будет работать нормально, но когда открыта более одной вкладки, новый сокет будет создан, а ранее открытые вкладки будут работать нормально. Поэтому я работал над сессиями и имел проблемы с доступом к sessionstore, его сеанс регистрации не был схвачен. Я тоже пробовал с session.load, но не повезлоexpress.session.MemoryStore не возвращает сеанс?
Как получить объект сеанса и использовать его таким образом, чтобы открытие других вкладок не повлияло бы на функциональность и не удаляло данные с сервера на клиент на всех вкладках?
var express=require('express');
var http = require('http');
var io = require('socket.io');
var cookie = require("cookie");
var connect = require("connect"),
MemoryStore = express.session.MemoryStore,
sessionStore = new MemoryStore();
var app = express();
app.configure(function() {
app.use(express.cookieParser());
app.use(express.session({store: sessionStore
, secret: 'secret'
, key: 'express.sid'}));
app.use(function (req, res) {
res.end('<h2>Hello, your session id is ' + req.sessionID + '</h2>');
});
});
server = http.createServer(app);
server.listen(3000);
sio = io.listen(server);
var Session = require('connect').middleware.session.Session;
sio.set('authorization', function (data, accept) {
// check if there's a cookie header
if (data.headers.cookie) {
// if there is, parse the cookie
data.cookie = connect.utils.parseSignedCookies(cookie.parse(data.headers.cookie),'secret');
// note that you will need to use the same key to grad the
// session id, as you specified in the Express setup.
data.sessionID = data.cookie['express.sid'];
sessionStore.get(data.sessionID, function (err, session) {
if (err || !session) {
// if we cannot grab a session, turn down the connection
console.log("session not grabbed");
accept('Error', false);
} else {
// save the session data and accept the connection
console.log("session grabbed");
data.session = session;
accept(null, true);
}
});
} else {
// if there isn't, turn down the connection with a message
// and leave the function.
return accept('No cookie transmitted.', false);
}
// accept the incoming connection
accept(null, true);
});
sio.sockets.on('connection', function (socket) {
console.log('A socket with sessionID ' + socket.handshake.sessionID
+ ' connected!');
});
Я думаю, мы должны отслеживать socket.id, но я не думаю, что это правильное решение. – user2626445
Можете ли вы сказать немного больше о поведении, которое вы хотите после открытия новых вкладок? Вы хотите, чтобы они действовали как совершенно новый клиент, или вы хотите, чтобы они делили один и тот же сеанс? – leorex
Есть ли у «err' что-нибудь? Или это '! Session', который говорит вам, что сеанса нет? – hexacyanide