我试图编码在Python脚本的对象,并将其设置为一个cookie,所以我可以用客户端JavaScript读取。
我碰到的问题,每次我试图做到这一点的方式。 一般来说,cookie被的方式,使JSON.parse()来打破格式化。
我当前的脚本:
cookie = Cookie.SimpleCookie()
data = {"name": "Janet", "if_nasty": "Ms. Jackson"}
cookie['test'] = json.dumps(data)
self.response.headers.add_header("Set-Cookie", cookie.output(header=''))
...这会导致
test="{\"name\": \"janet\"\054 \"if_nasty\": \"Ms. Jackson\"}"
在客户端上。
我真的不希望引入一个黑客-Y解决方案时出现,他们更换逗号的实例。 任何想法如何,我可以通过复杂的数据结构(包括通过设置和读取Cookie)与Python?
我也想读一个Cookie(已被设置在服务器上)在客户端上。 我工作围绕这一问题通过编码JSON字符串的base64,但有这种方法涉及以及一些小陷阱。
1:Base64的串结束0-2个等号,将它们转换成字符串\ 075。 我的做法是对这些字符还原到客户端上的平等字符。
2:基于64位字符串被封闭在cookie中的双引号字符。 我删除客户端上的这些。
服务器:
nav_json = json.dumps(nav_data)
nav_b64=base64.b64encode(nav_json)
self.response.set_cookie('nav_data', nav_b64)
客户:
var user_data_base64= $.cookie('nav_data');
// remove quotes from around the string
user_data_base64 = user_data_base64.replace(/"/g,"");
// replace \075 with =
user_data_base64 = user_data_base64.replace(/\\075/g,"=");
var user_data_encoded=$.base64.decode( user_data_base64 );
var user_data = $.parseJSON(user_data_encoded);
我使用2个jQuery插件在这里: https://github.com/carlo/jquery-base64和https://github.com/carhartl/jquery-cookie
注:我认为这是一个黑客:这将是更好地重新实现编码在JavaScript中的cookie的Python代码,但是这也有,你需要注意和端口,并修改代码的缺点。
我现在已经搬到这里我用一个小的HTML文件设置在客户端上该Cookie,然后重定向到请求的实际网页的解决方案。 下面是从我使用Jinja2的模板片段:
<script type="text/javascript">
var nav_data='{% autoescape false %}{{nav_data}}{% endautoescape %}';
$.cookie('nav_data', nav_data, { path: '/' });
window.location.replace("{{next}}")
</script>
注2:Cookies是不理想的我的使用情况下,我可能会移动到会话或本地存储,以减少网络开销(虽然我的nav_data是相当小的 - 十字符左右。)
不知道一个cookie是这样做的最佳方式? 看到入门指南的信息数据呈现到客户端
文章来源: How can I send JSON-formatted cookie data using Python on Google App Engine?