在GAE中尝试添加Set-Cookie头时出错

3 投票
2 回答
2373 浏览
提问于 2025-04-16 12:32

我正在尝试在我的项目中引入一个外部的Python模块,用来处理会话。这个模块叫做 gmemsess.py。它试图在响应中添加一个Set-Cookie的头信息,但出现了一个错误:

rh.response.headers.add_header('Set-Cookie','%s=%s; path=/;'%(name,self._sid))
AttributeError: HeaderDict instance has no attribute 'add_header'

我查看了文档,感觉一切都没问题,但就是不管用。这个错误为什么会出现呢?另外,我使用webapp2来管理子域名。可能是因为这个原因出错了吗?

2 个回答

3

忽略 -- 请查看下面的评论

这个模块是为了和App Engine一起使用而写的吗?App Engine使用的响应对象没有add_header这个方法,具体可以查看文档

相反,它有一个像字典一样的对象headers,你可以像下面这样给它赋值:

response.headers['Set-Cookie'] = "whatever your cookie value is"
5

如果你在使用标准的AppEngine,headers.add_header这个方法应该是可以正常工作的。不过我猜你可能在用某个框架,比如Bottle,这些框架会用一个自定义的东西来替代webob的Response对象。

稍微在谷歌上查一下,你会发现有一个叫做HeaderDict的类,它是MultiDict的扩展,我觉得你可能就是在处理这个。在这种情况下,你需要打开gmemsess.py文件,找到这一行

rh.response.headers.add_header('Set-Cookie','%s=%s; path=/;'%(name,self._sid))

然后把它改成

rh.response.headers['Set-Cookie'] = '%s=%s; path=/;'%(name,self._sid)

这样应该就能解决你的问题了。

撰写回答