0

我正在尝试将 python 字典保存在 cookie 中,然后能够将 cookie 值转换回 jquery 或 javascript 中的 dict。我正在使用 python 3.3.1。我对格式(查询字符串、json 等)感到困惑。

我正在使用这个 jquery cookie 库

https://github.com/carhartl/jquery-cookie

我尝试了以下方法:

服务器端:

import urlib.parse
d= {'key1':'value1','key2':'value2'}
cookie_data = urllib.parse.urlencode(d)

客户端:

cookie_data = $.cookie('Cookie_Name');
var dict = $.parseJson(cookie_data);

这样做的正确方法是什么,所以我最终在客户端得到了一个有效的字典?

我也尝试过使用:

服务器端:

d = {'key1':'value1','key2':'value2'}
cookie_data = json.dumps(d)

这让我得到了字符串中所需的 json 数据。

cookie_data 现在是 '{"key1":"value1","key2":"value2"}'

但是,当我将它作为 cookie 发送时,字符串会像这样出现

"\173\"key2\": \"value2\"\054 \"key1\": \"value1\"\175"

这就是为什么我认为我需要以某种方式对其进行编码。

我也试过:

var cookie_str = $.cookie('My_cookie');
var decoded_cookie = decodeURIComponent(cookie_str);

cookie_str 和 decoded_cookie 都是一样的

\173"key2": "value2"\054 "key1": "value1"\175

4

2 回答 2

2

我通过做这个服务器端弄清楚了:

import urlib.parse, json
cookie_data = urllib.parse.quote(json.dumps(mydict))

客户端使用jquery

var dict = $.parseJSON($.cookie('MyCookie'));
于 2013-10-25T22:09:11.167 回答
1

在 JS 中使用控制台日志记录对于调试来回发送的信息非常有用。

console.log(cookie_data)

将打印实际存储的内容$.cookie('Cookie_Name');

这里的问题是您将 url 编码的值存储在 server:key1=value1&key2=value2中,但您想要 json: {"key1": "value1", "key2": "value2"}。您需要在服务器上将数据编码为 JSON 格式,这正是客户端所期望的。

repr会让你接近,但它使用单引号,并且 JSON 标准为字符串指定双引号。您的客户端可能会接受这一点,但为了符合标准以及转义其他数据,您应该使用 python 库来编码 JSON,例如simplejson

>>> simplejson.JSONEncoder().encode({'k':'v', 'k2': 'v2'})
'{"k2": "v2", "k": "v"}'
>>> repr({'k':'v', 'k2': 'v2'})
"{'k2': 'v2', 'k': 'v'}"
于 2013-10-25T18:08:59.547 回答