GAE:使用SimpleCookie设置多个cookie(或多值cookie)

时间:2011-10-26 06:57:28

标签: python google-app-engine cookies

我正在使用Google App Engine。如何使用单个响应设置多个cookie或多值cookie?

现在我正在使用网址http://localhost:8085/server/showcookie?emailAddress=myemail@gmail.com&secretCode=1

中的此代码
C = Cookie.SimpleCookie()
C["emailAddress"] = self.request.get('emailAddress')
C["secretCode"] = self.request.get('secretCode')
C["secretCode"]["path"] = "/"
header_value = C.output(header='')
self.response.headers.add_header("Set-Cookie", header_value)

这不起作用,因为header_value的值是emailAddress =“myemail@gmail.com”secretCode = 1; Path = /不是一个格式良好的标题(它缺少一个逗号)。如何使用这两个值创建格式良好的cookie?

3 个答案:

答案 0 :(得分:4)

使用两个SimpleCookie对象解决它:

C1 = Cookie.SimpleCookie()
C1["emailAddress"] = self.request.get('emailAddress')
C2 = Cookie.SimpleCookie()
C2["secretCode"] = self.request.get('secretCode')
C2["secretCode"]["path"] = "/"
self.response.headers.add_header("Set-Cookie", C1.output(header=''))
self.response.headers.add_header("Set-Cookie", C2.output(header=''))

答案 1 :(得分:1)

因此,C.output()尝试发出2个完整的cookie响应头。您已清空标题名称,因此结果是由\ r \ n。

分隔的2个值

您需要使用SimpleCookie吗?您可以在WebOb响应对象上set cookies directly

self.response.set_cookie('emailAddress', self.request.get('emailAddress'))
self.response.set_cookie('secretCode', self.request.get('secretCode'), path='/')

答案 2 :(得分:1)

在你自己的set_cookie()例程中啪嗒一声。

import datetime
import Cookie

def set_cookie(self, name, value, expires=None):
    """Set a cookie"""
    if value is None:
        value = 'deleted'
        expires = datetime.timedelta(minutes=-50000)
    jar = Cookie.SimpleCookie()
    jar[name] = value
    jar[name]['path'] = u'/'
    if expires:
        if isinstance(expires, datetime.timedelta):
            expires = datetime.datetime.now() + expires
        if isinstance(expires, datetime.datetime):
            expires = expires.strftime('%a, %d %b %Y %H:%M:%S')
        jar[name]['expires'] = expires
    self.response.headers.add_header(*jar.output().split(u': ', 1))

您使用

调用该函数
set_cookie('my_cookie', 'things-you-want-to-add-in-the-cookie') 
set_cookie('1d_cookie', 'only-one-day', datetime.timedelta(minutes=1440))