2011-12-15 3 views
0

Я использую Socket.io и выражать и имеют следующий код:не может закончить сеанс

io.set('authorization', function (data, accept) { 
if (data.headers.cookie) { 
    data.cookie = parseCookie(data.headers.cookie); 
    data.sessionID = data.cookie['express.sid']; 
    data.sessionStore = session; 
    session.get(data.sessionID, function (err, session) { 
     if (err || !session) { 
      accept('Error', false); 
     } else { 
      data.session = new msession(data, session); 
      accept(null, true); 
     } 
    }); 
} else { 
    return accept('No cookie transmitted.', false); 
} 

});

сеанс является глобальной переменной.

Проблема в том, что я пытаюсь завершить сеанс, вызвав session.destroy(), когда вызывается страница выхода ... но это не конец. Есть ли что-то дополнительное, что мне нужно сделать?

+0

Эта сессия глобальная переменная от Экспресс права? – alessioalex

+0

Нет, я добавил это сам.
var MemoryStore = express.session.MemoryStore;
session = new MemoryStore(); – firebird

ответ

0

Вы должны позвонить session.destroy(sid, [optional callback function]);, где sid - идентификатор сеанса. Вот код для магазина памяти:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session/memory.js#L79-92

+0

Я пробовал, что это не сработало. socket.on ('logout', function() { console.log ('Выход из системы:' + socket.handshake.sessionID); session.destroy (socket.handshake.sessionID); }); Должен ли я очищать файлы cookie и т. Д.? – firebird

+0

попробовал socket.handshake.sessionStore.destroy (socket.handshake.sessionID), но это тоже не сработало. Я использую метод session для socket.io + express, описанный здесь: http: //www.danielbaulig.de/socket-ioexpress/ – firebird

+0

Вы должны попробовать 'sessionStore.destroy (socket.handshake.sessionID)' вместо 'socket .handshake.sessionStore.destroy (socket.handshake.sessionID) '. – alessioalex

Смежные вопросы