在Python中设置unicode cookie的通用方法

时间:2011-07-29 12:28:27

标签: python http cookies

如果值中有空格,则只使用“示例”代码将第一个单词保存到cookie中。

什么是真正正确的,兼容unicode的方式?

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

UPD。解决方案如下

1 个答案:

答案 0 :(得分:2)

最后,工作完成了:

  1. Cookie使用Cookie.SimpleCookie转义
  2. 未使用自定义代码
  3. 用字符串的编码/解码
  4. 编码/解码的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