Skip to main content
 首页 » 编程设计

python之Pylons 和烧杯 : JSON Encoded Sessions

2025年05月04日12JeffreyZhao

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

解码 base64 后,我得到一个包含序列化 Python 对象的字符串,这在 node.js 中很难解析

如何让 Beaker 序列化为 JSON?因为 node.js 更容易处理。

请您参考如下方法:

我必须查看烧杯内部才能找到你所说的“Python 序列化字符串”是 python pickles。

我认为只需要几行就可以更改它以使用 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