2016-01-15 4 views
0

Я пытаюсь получить доступ к данным сеанса из node.js, который хранится в redis. В Redis-кли я побежал ключи * и вернулсяredis string выглядит как хэш, получая значение

1) "sess:ZRhBJSVLjbNMc-qJptjiSjp8lQhXGGBb" 
2) "sess:6p1EcGvJukTT26h88NqoTGdz2R4zr_7k" 

Если я затем запустить GET я получить обратно то, что выглядит как хэш

redis 127.0.0.1:6379> GET sess:ZRhBJSVLjbNMc-qJptjiSjp8lQhXGGBb 
"{cookie:{originalMaxAge:null,expires:null,httpOnly:true,path:/},userKey:a92ca307-b315-44bc-aadf-da838d063c78, 
authenticated:true,clientKey:1ccb5308-2a7e-4f49-bcdf-b2379de44541}" 

Если я пытаюсь получить значение в userKey с помощью

hget sess:oq6RW1zP7sfcZZc4wb1RHbti390FxL7- userKey 

возвращает

ERR Operation against a key holding the wrong kind of value 

, поэтому я запустил проверку TYPE и обнаружил, что это не хэш, а строка. Я немного запутался, поскольку все это выглядит как хэш, и я не могу понять, как вернуть значения, которые мне нужны, поскольку просто вызов возвращает все это.

Есть ли какая-то другая команда, которую мне нужно использовать для получения значений?

Благодаря

ответ

2

Если вы можете получить aganist ключ, то его не является хешем, потому что вы получите ERR Operation against a key holding the wrong kind of value. И это было подтверждено yourserlf, выполняя HGET и получив ошибку.

Вероятно, эти ключи выглядят как хэш, потому что (это хэш, но не redis hash datatype) это уникальный токен, который был выдан пользователю в его сеансе cookie в клиенте. Когда пользователь отправляет этот файл cookie на сервер в каждом запросе, сервер может извлекать информацию о сеансе из redis, используя значение cookie как redis key.

Значение представляет собой строку в формате JSON. Вы должны получить всю ценность и проанализировать ее; ussing JSON.parse в node.js мог бы выполнить эту работу. После того, как значение обрабатывается у вас есть объект JavaScript, какие атрибуты может быть доступ стандартным образом:

var sessionData = JSON.parse(JSONString); 
console.log(sessionData.userKey) 
+0

Спасибо, как только я прочитал это строка в формате JSON я отдавал себе в лице. Приветствия за то, что нашли время, чтобы дать полный ответ – Simon245

1
  1. Это строка
  2. Вы не можете получить какую-то ценность сеанса напрямую, потому что это сериализованную в какой-то формат (в данном случае, JSON)
  3. Если написано сессия by node.js, вы должны использовать тот же API для чтения.
  4. Если сеанс записывается другой системой, и вы должны разобрать его с узлом, вы должны просто получить его, и JSON синтаксического анализа (JSON.parse)
Смежные вопросы