如何在Rails中解析Redis字符串(最初是JSON)?

时间:2019-03-12 11:47:38

标签: ruby-on-rails json magento redis

我正在尝试从Rails 5.1中的Magento 1.9.3.7 Redis会话读取用户会话数据。

  1. 用户登录
  2. Magento Credis设置为使用Zlib压缩会话数据(JSON字符串)。
  3. Magento将压缩的会话数据存储在Redis中

使用redis-rb宝石:

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 个答案:

答案 0 :(得分:1)

结果是,该格式是序列化的PHP Session。

  • 这是自Magento在PHP上运行以来的序列化PHP会话!

请参阅this question

使用会话数据,通常会用PHP调用session_decode

万一有人想在Rails中反序列化PHP会话,这是我发现的两个瑰宝: