在Python中设置Unicode Cookie的通用方法

0 投票
1 回答
1950 浏览
提问于 2025-04-16 22:30

如果值里面有空格的话,使用一个“示例”代码时,只会把第一个单词保存到cookie里。

那么,怎样才能正确地、兼容各种字符地做到这一点呢?

response.headers.add_header(
  'Set-Cookie',
  '%s=%s; expires:Sun, 31-May-2020 23:59:59 GMT; path=/;' % (key, value))

更新:下面有一个解决方案

1 个回答

2

最后工作完成了:

  1. 用 Cookie.SimpleCookie 处理了 cookies 的转义
  2. 用自定义代码进行了反转义
  3. 用字符串的编码和解码处理了 unicode

代码如下:

import Cookie
def set_unicode_cookie(response, key, value):
  c = Cookie.SimpleCookie()
  c[key] = value.encode('unicode-escape')
  c[key]["expires"] = "Sun, 31-May-2020 23:59:59 GMT"
  c[key]["path"] = "/"
  response.headers.add_header('Set-Cookie', c[key].OutputString())

def get_unicode_cookie(request, key, defult_value):
  def unescape(s):
    m = re.match(r'^"(.*)"$', s)
    s = m.group(1) if m else s
    return s.replace("\\\\", "\\")
  if request.cookies.has_key(key):
    return unescape(request.cookies[key]).decode('unicode-escape')
  else:
    return default_value

撰写回答