来看看它是怎么工作的。 当你打开浏览器并访问 ,你的浏览器会给Google发送一个HTTP请求,起始部分就象这样:
当 Google响应时,HTTP的响应是这样的:
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
expires=Sun, 17-Jan-2038 19:14:07 GMT;
path=/; domain=.google.com
Server: GWS/2.1
...
注意 Set-Cookie
的头部。 你的浏览器会存储cookie值( PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671
) ,而且每次访问google 站点都会回送这个cookie值。 因此当你下次访问Google时,你的浏览器会发送像这样的请求:
在Django中处理持久化,大部分时候你会更愿意用高层些的session 和/或 后面要讨论的user 框架。 但在此之前,我们需要停下来在底层看看如何读写cookies。 这会帮助你理解本章节后面要讨论的工具是如何工作的,而且如果你需要自己操作cookies,这也会有所帮助。
读取已经设置好的cookies极其简单。 每一个HttpRequest
对象都有一个COOKIES
对象,该对象的行为类似一个字典,你可以使用它读取任何浏览器发送给视图(view)的cookies。
def show_color(request):
return HttpResponse("Your favorite color is %s" % request.COOKIES["favorite_color"])
else:
return HttpResponse("You don't have a favorite color.")
写cookies稍微复杂点。 你需要使用 HttpResponse
对象的 set_cookie()
方法。 这儿有个基于 GET
参数来设置 favorite_color
你可以给 response.set_cookie()
传递一些可选的参数来控制cookie的行为,详见表14-1。
System Message: ERROR/3 (<string>
, line 145)
Error parsing content block for the “table” directive: exactly one table expected.
.. table:: 表 14-1: Cookie 选项
+---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|参数 |缺省值 |描述 |
|``max_age`` |``None`` |cookie需要延续的时间(以秒为单位) 如果参数是\ `` None`` ,这个cookie会延续到浏览器关闭为止。 |
+---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|``path`` |``"/"`` |cookie生效的路径前缀。 浏览器只会把cookie回传给带有该路径的页 面,这样你可以避免将cookie传给站点中的其他的应用。 |
| | | |
| | |当你不是控制你的站点的顶层时,这样做是特别有用的。 |
+---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|``domain`` |``None`` |这个cookie有效的站点。 你可以使用这个参数设置一个跨站点(cross-domain)的cookie。 比如,\ `` domain=".example.com"`` 可以设置一个在\ `` www.example.com`` 、\ `` www2.example.com`` 以及\ `` an.other.sub.domain.example.com`` 站点下都可读到的cookie。|
| | | |
| | |如果这个参数被设成\ `` None`` ,cookie将只能在设置它的站点下可以读到。 |
+---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|``False`` |``False`` |如果设置为 ``True`` ,浏览器将通过HTTPS来回传cookie。 |