来看看它是怎么工作的。 当你打开浏览器并访问 ,你的浏览器会给Google发送一个HTTP请求,起始部分就象这样:

    当 Google响应时,HTTP的响应是这样的:

    1. HTTP/1.1 200 OK
    2. Content-Type: text/html
    3. Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
    4. expires=Sun, 17-Jan-2038 19:14:07 GMT;
    5. path=/; domain=.google.com
    6. Server: GWS/2.1
    7. ...

    注意 Set-Cookie 的头部。 你的浏览器会存储cookie值( PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671 ) ,而且每次访问google 站点都会回送这个cookie值。 因此当你下次访问Google时,你的浏览器会发送像这样的请求:

    在Django中处理持久化,大部分时候你会更愿意用高层些的session 和/或 后面要讨论的user 框架。 但在此之前,我们需要停下来在底层看看如何读写cookies。 这会帮助你理解本章节后面要讨论的工具是如何工作的,而且如果你需要自己操作cookies,这也会有所帮助。

    读取已经设置好的cookies极其简单。 每一个HttpRequest 对象都有一个COOKIES 对象,该对象的行为类似一个字典,你可以使用它读取任何浏览器发送给视图(view)的cookies。

    1. def show_color(request):
    2. return HttpResponse("Your favorite color is %s" % request.COOKIES["favorite_color"])
    3. else:
    4. 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.

    1. .. table:: 14-1: Cookie 选项
    2. +---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    3. |参数 |缺省值 |描述 |
    4. |``max_age`` |``None`` |cookie需要延续的时间(以秒为单位) 如果参数是\ `` None`` ,这个cookie会延续到浏览器关闭为止。 |
    5. +---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    6. +---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    7. |``path`` |``"/"`` |cookie生效的路径前缀。 浏览器只会把cookie回传给带有该路径的页 面,这样你可以避免将cookie传给站点中的其他的应用。 |
    8. | | | |
    9. | | |当你不是控制你的站点的顶层时,这样做是特别有用的。 |
    10. +---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    11. |``domain`` |``None`` |这个cookie有效的站点。 你可以使用这个参数设置一个跨站点(cross-domain)的cookie 比如,\ `` domain=".example.com"`` 可以设置一个在\ `` www.example.com`` \ `` www2.example.com`` 以及\ `` an.other.sub.domain.example.com`` 站点下都可读到的cookie。|
    12. | | | |
    13. | | |如果这个参数被设成\ `` None`` cookie将只能在设置它的站点下可以读到。 |
    14. +---------------------------------+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    15. |``False`` |``False`` |如果设置为 ``True`` ,浏览器将通过HTTPS来回传cookie |

    好坏参半的Cookies