Пилоны и мензурка: сеансы в кодировке JSON

#python #node.js #pylons #beaker

#python #node.js #пилоны #мензурка

Вопрос:

Необходимо прочитать данные сеанса пилонов (просто прочитать, а не записать) в node.js

Как только я декодирую base64, у меня остается строка, содержащая сериализованный объект Python, который сложно разобрать node.js

Как я могу заставить стакан сериализовать в JSON вместо этого? Поскольку это намного проще для node.js для обработки.

Ответ №1:

мне пришлось заглянуть внутрь стакана, чтобы найти то, что вы называете «сериализованными строками Python», — это огурцы python.

я не думаю, что потребуется больше нескольких строк, чтобы изменить его, чтобы использовать json для хранения dict.

вот исправление против https://bitbucket.org/bbangert/beaker/src/257f147861c8:

 diff -r 257f147861c8 beaker/session.py
--- a/beaker/session.py Mon Apr 18 11:38:53 2011 -0400
    b/beaker/session.py Sat Apr 30 14:19:12 2011 -0400
@@ -489,10  489,10 @@
             nonce = b64encode(os.urandom(40))[:8]
             encrypt_key = crypto.generateCryptoKeys(self.encrypt_key,
                                              self.validate_key   nonce, 1)
-            data = util.pickle.dumps(self.copy(), 2)
             data = util.json.dumps(self.copy())
             return nonce   b64encode(crypto.aesEncrypt(data, encrypt_key))
         else:
-            data = util.pickle.dumps(self.copy(), 2)
             data = util.json.dumps(self.copy())
             return b64encode(data)

     def _decrypt_data(self):
@@ -504,10  504,10 @@
                                              self.validate_key   nonce, 1)
             payload = b64decode(self.cookie[self.key].value[8:])
             data = crypto.aesDecrypt(payload, encrypt_key)
-            return util.pickle.loads(data)
             return util.json.loads(data)
         else:
             data = b64decode(self.cookie[self.key].value)
-            return util.pickle.loads(data)
             return util.json.loads(data)

     def save(self, accessed_only=False):
         """Saves the data for this session to persistent storage"""
diff -r 257f147861c8 beaker/util.py
--- a/beaker/util.py    Mon Apr 18 11:38:53 2011 -0400
    b/beaker/util.py    Sat Apr 30 14:19:12 2011 -0400
@@ -24,6  24,11 @@
     import pickle
 else:
     import cPickle as pickle
 
 try:
     import json
 except ImportError:
     import simplejson as json

 from beaker.converters import asbool
 from beaker import exceptions
  

Комментарии:

1. 1 за то, что перешел к исходному коду, исправил проблему и запустил патч.