Не удалось получить тот же сеанс (sessionID) в Sock JS (Websocket) NodeJS Server - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь сохранить сеансы на стороне сервера, даже после отключения клиента.

У меня есть стандартный Sock JS client и sock js -node setup.

Идея состоит в том, что если клиент подключается, то отключается, а затем повторно подключается к серверу; клиент должен возвращать один и тот же сеанс с сервера при каждом подключении.

Чтобы попытаться добиться этого, в настоящее время я генерирую строку произвольного идентификатора сеанса на стороне клиента, а затем передаю этот идентификатор носку JS server.

Проблема, с которой я сталкиваюсь, заключается в том, что сервер возвращает null , когда я передаю sessionID на сервер, чтобы попытаться получить существующий сеанс.

As Насколько я понимаю, именно так Sock JS реализует сохранение сеанса: https://github.com/sockjs/sockjs-node/blob/master/lib/session.js

Я не совсем понимаю, почему я возвращаюсь null сеанс должен поддерживаться на сервере ...?

Вот так я сейчас отправляю ID на сервер Sock JS:

const socket = SockJS(`https://my-server.com/socket/auth/login`, null, {
  sessionId: () => {

    // (1) Check if a session ID already exhists
    let sessionId = localStorage.getItem('sockjsSessionId');


    if(sessionId === null || sessionId === undefined) {

      // (2) If Session ID does not exist, create a random ID.
      sessionId = getRandomStringWithLength(8);
      localStorage.setItem('sockjsSessionId', sessionId);
    }

    // (3) Pass session id to SockJS Server
    return sessionId;
  }
});

Вот так я сейчас пытается получить тот же сеанс на сервере:

if (sessionId !== null && typeof sessionId !== 'undefined') {
  const socketSession: SockJSSession | null = SockJSSession.bySessionId(sessionId);
  console.log('found sockjs session connection', socketSession);
  if (socketSession !== null) {
    socketSession.connection.write(JSON.stringify(response));
  }
}
...