需要在 node.js 中读取 Pylons 会话数据(只读,不写入)
一旦我解码了 base64,我就会得到一个包含序列化 Python 对象的字符串,这在 node.js 中解析起来很麻烦
我怎样才能让 Beaker 序列化为 JSON?因为对于 node.js 来说,这更容易处理。
我认为只需几行代码就可以改变它,使其使用 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