Как разобрать строку Redis (изначально JSON) в Rails? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь прочитать данные сеанса пользователя из моего сеанса Redis в Rails 5.1.

  1. Пользователь входит в систему
  2. Magento Credis настроен на использование Zlib для сжатия данных сеанса (строки JSON).
  3. Magento сохраняет сжатые данные сеанса в Redis

Использование redis-rb gem:

redis = Redis.new(
        host: ENV['MAGENTO_REDIS_SESSION_HOST'],
        password: ENV['MAGENTO_REDIS_SESSION_PASS'],
        port: ENV['MAGENTO_REDIS_SESSION_PORT'],
        db: ENV['MAGENTO_REDIS_SESSION_DB']
      )
data = redis.hget("sess_123456", "data")
data = data.[4..data.length]
#  => data
#  :gz:x\u0001\xEDWM\x8F\xDB6\u0010\...

json_string = Zlib::Inflate.inflate(data)
# => json_string
# "_secure_cookie_check|s:32:\"4d1234ebebc1234fcf1234fc1234d6da\";core|a:5:{s:23:\"_session_validator_data\";...

Обратите внимание на |s:<some_number> и a:<some_number> в

Я понимаю, что s:32 - это длина строки 4d1234ebebc1234fcf1234fc1234d6da.

Это известный формат? Если да, то какой это формат?

Есть ли библиотека, которую я могу использовать для разбора этой строки?

Заранее спасибо!

1 Ответ

1 голос
/ 12 марта 2019

Оказывается, этот формат является сериализованной сессией PHP.

  • Это сериализованная сессия PHP, так как Magento работает на PHP!

См. этот вопрос

С данными сеанса вы обычно вызываете session_decode в PHP

На случай, если кто-то захочет десериализовать PHP-сессию в Rails, я нашел два гема:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...