如何从Django设置P3P紧凑隐私策略,以便IE在安全设置为HIGH时接受来自我网站的cookie - 即除非有紧凑隐私政策,否则不接受cookie.
干杯盖伊
中间件是在"每个请求"的基础上执行此类操作的首选方式.例如,这里有一个简单的中间件,可以为Django生成的每个响应添加相同的(示例)P3P头:
在settings.py中:
P3P_COMPACT = 'policyref="http://www.example.com/p3p.xml", CP="NON DSP COR CURa TIA"' MIDDLEWARE_CLASSES += ('myapp.middleware.P3PHeaderMiddleware',)
在myapp/middleware.py中:
from django.conf import settings class P3PHeaderMiddleware(object): def process_response(self, request, response): response['P3P'] = getattr(settings, 'P3P_COMPACT', None) return response
您还可以通过在响应中设置P3P标头在单个视图中获得类似的效果:
def my_view(request): response = render_to_response('my_template.html') response['P3P'] = 'CP="NON DSP COR CURa TIA"' return response
为了稍微扩展一下这个主题,作为响应的一部分,cookie和标题(如P3P标题)都是同时发送的; 事实上,在引擎盖下,cookie设置了另一个响应头.您可以使用curl查看cookie标头:
$ curl --head http://www.google.com/ HTTP/1.1 200 OK Date: Wed, 13 Jan 2010 00:04:59 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 Set-Cookie: PREF=ID=d2c09762c479f94e:TM=1263341099:LM=1263341099:S=oJby3NpU4RsRfuYa; expires=Fri, 13-Jan-2012 00:04:59 GMT; path=/; domain=.google.com Set-Cookie: NID=30=kdKrd5e-u6Xs7cUe3p4eaNDtv6SO88uBL5v6_M1XMTSRmkh7okxrWLOm-l_uZdN37PxQIe4dBlekFFVCpTFXGyIDlUrz1hEwhgVLvXfIik_VeVWGmWzKbA5qu_Zq0sOi; expires=Thu, 15-Jul-2010 00:04:59 GMT; path=/; domain=.google.com; HttpOnly Server: gws X-XSS-Protection: 0 Transfer-Encoding: chunked