塔和烧杯:JSON编码的会话

需要在node.js中读取Pylons会话数据(只读,不写)

一旦我解码base64,我剩下一个string包含一个序列化的Python对象,这是一个痛苦的parsingnode.js

我怎样才能让烧杯序列化为JSON呢? 因为node.js处理起来要容易得多。

我不得不看里面的烧杯,find你所谓的“Python序列化的string”是python酱。

我不认为这将是多行改变它得到它使用JSON来存储字典。

这是一个针对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