Почему ключи redis продолжают увеличиваться с каждым запросом при использовании connect-redis для управления сеансом? - PullRequest
0 голосов
/ 25 октября 2019

Я использую connect-redis v3.x для управления сеансами для моего приложения sails (использует экспресс-сеанс).

Все настроено согласно руководству , и оно работает правильно, когда отображается на внешнем интерфейсе, например, когда я перезагружаю сервер, сеанс сохраняется и пользователь входит в систему.

Но когда я проверяю redis-cli, я вижу, что ключ добавляется для каждого http-запроса;Это желаемое поведение? Это будет тяжело для хранилища, когда система масштабируется, так как будет вход в redis для каждого запроса.

Я не понимаю, как это работает под капотом, но Я ожидал , что когдапользователь входит в систему, он будет хранить идентификатор сессии и информацию куки, которые позже будут использоваться для соответствия информации аутентификации;независимо от того, сколько запросов пользователь делает после входа в систему, он будет использовать один и тот же идентификатор сеанса и информацию cookie для аутентификации пользователя. Я ошибаюсь или я что-то неправильно настроил?

Редактировать: Как отметил @japrescott, это нежелательное поведение. Я добавляю больше информации, чтобы выяснить проблему.

Дополнительные наблюдения:

Я регистрировал входящие запросы несколько раз на сервере и заметил, что

  • req.session.id остается одинаковым для всех запросов,Он остается неизменным даже при выходе пользователя из системы.
//req.session.id
Request#1: c_FfYp3ueX0DsGLC0WSLt
Request#2: c_FfYp3ueX0DsGLC0WSLt
  • req.session.cookie и req.cookies дают различный вывод. Для каждого запроса в req.session.cookie изменяется только поле expires
//req.session
Request#1 : {"cookie":{"originalMaxAge":2332799997,"expires":"2019-11-22T04:51:24.325Z","httpOnly":true,"path":"/"},"messages":{"success":[],"error":[],"warning":[]},"timezone":"Asia/Calcutta","passport":{"user":"5bc9b1559e47b71da3a61d5a"}}
Request#2 : {"cookie":{"originalMaxAge":2332799997,"expires":"2019-11-22T05:55:24.325Z","httpOnly":true,"path":"/"},"messages":{"success":[],"error":[],"warning":[]},"timezone":"Asia/Calcutta","passport":{"user":"5bc9b1559e47b71da3a61d5a"}}


//req.cookies
{"_ga":"GA1.1.1355665360.1522218513","_hjid":"687665e4-38a4-4355-912c-6045e67acc00","_hjIncludedInSample":"1","io":"J-5QVd1ufdDchLv7AAbA","_gid":"GA1.1.1355665360.1522218513","_gat_UA-73956964-3":"1"}
  • На стороне клиента cookie устанавливается для сеанса должным образом с именем sails.sid, которое, кажется, работаетдолжным образом. Это поле expires изменяется во время входа в систему и остается неизменным на протяжении всего сеанса, вошедшего в систему.
  • Когда я использую опцию saveUninitialized: false, redis не хранит ни одну пару ключ-значение для сеанса (даже ни разу). , даже не во время входа в систему)

Проблема не воспроизводится в Firefox . Никаких дополнительных записей в Redis. Но выше журналы показывают то же поведение, что и выше 4 пункта даже для Firefox.

Проблема воспроизводится в Chrome для разных ОС.

Это , как хранится несколько записейв redis (показаны только значения) выглядит как

Saved on Request#1(login) : {\"cookie\":{\"originalMaxAge\":2332799999,\"expires\":\"2019-11-22T05:40:39.017Z\",\"httpOnly\":true,\"path\":\"/\"},\"messages\":{\"success\":[],\"error\":[],\"warning\":[]},\"timezone\":\"Asia/Kolkata\",\"passport\":{\"user\":\"5bc9b1559e47b71da3a61d5a\"}}

Saved on Request#2 : "{\"cookie\":{\"originalMaxAge\":2332800000,\"expires\":\"2019-11-22T05:57:06.225Z\",\"httpOnly\":true,\"path\":\"/\"}}"

Saved on Request#3 : "{\"cookie\":{\"originalMaxAge\":2332800000,\"expires\":\"2019-11-22 T05:57:11.186Z\",\"httpOnly\":true,\"path\":\"/\"}}

А вот полный заголовок запроса, полученный на сервер от клиента

//Request from Chrome
{
  "host": "localhost:3000",
  "connection": "keep-alive",
  "upgrade-insecure-requests": "1",
  "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
  "accept-encoding": "gzip, deflate, br",
  "accept-language": "en-US,en;q=0.9",
  "referer": "http://localhost:3000/user/dashboard",
  "cookie": "_ga=GA1.1.1dsd50.15dsfs8814; _hjid=dsf665e4-sfsdd-4dfd-912c-dsfsdfsdf; _hjIncludedInSample=1; io=J-dsfsd; _gid=GA1.1.1dsfdxx.dfdfxxw064; sails.sid=s%3A0TILcXehUjhcPDykvxwopctILbBJB2pe.ts95dvdwV9nktKeCO6%2BNahMuJ3TrWb5h%2F8%2BccRiTap0",
  "sec-fetch-mode": "navigate",
  "sec-fetch-user": "?1",
  "sec-fetch-site": "same-origin",
  "dnt": "1",
}

//Request from Firefox
{
  "host": "localhost:3000",
  "connection": "keep-alive",
  "upgrade-insecure-requests": "1",
  "user-agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0",
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  "accept-language": "en-US,en;q=0.5",
  "accept-encoding": "gzip, deflate",
  "referer": "http://localhost:3000/user",
  "cookie": "_ga=GA1.1.1afdsfdscd42.15dsfdsfs28; _hjid=b6asdfsd6-sdfds0df-4sd2b-8sdfd-0sdfsdb99b4; sails.sid=s%3AAUruqhip_1eTZjWq4FHMAajfdFiYpN5o.xjI8R8x04IX8MGIXHCyT1xw9ErvZdsfd2MJciToUE; _gid=GA1.1.7sdfsd86.1dsfsd3207; _hjIncludedInSample=1",
  "if-none-match": "W/\"4a44-s94WDFGXnSin4kOElQeWwQ\""
}

...