http.cookies --- HTTP状�管�¶

�代�: Lib/http/cookies.py


http.cookies 模�定义的类将 cookie 的概念抽象了出�,这是一� HTTP 状�的管�机制。它既支�简�的纯字符串形�的 cookie,也为任何��列化数�类型的 cookie �供抽象。

之�该模�严格应用了 RFC 2109 和 RFC 2068 规范中�述的解�规则。 ��人们�现 MSIE 3.0x 并未�循这些规范中�述的字符规则;目����览器和�务器在处� cookie 时也放宽了解�规则。 因此,该模�目�使用的解�规则也没有以�那么严格了。

字符集 string.ascii_letters, string.digits 和 !#$%&'*+-.^_`|~: 标明了本模��许在 cookie �称中出现的有效字符 (如 key)。

在 3.3 版本�生�更: �许 ':' 作为有效的 cookie �称字符。

备注

当�到无效 cookie 时会触� CookieError,所以若 cookie 数��自�览器,一定��好应对无效数�的准备,并在解�时�获 CookieError。

exception http.cookies.CookieError¶

出现异常的原因,�能是�符� RFC 2109 :属性�正确�Set-Cookie 头部信��正确等等。

class http.cookies.BaseCookie([input])¶

类似字典的对象,字典键为字符串,字典值是 Morsel 实例。请注�,在将键值关�时,首先会把值转�为包�键和值的 Morsel 对象。

若给出 input ,将会传给 load() 方法。

class http.cookies.SimpleCookie([input])¶

该类派生自 BaseCookie 并�写了 value_decode() 和 value_encode()。 SimpleCookie 支�用字符串作为 cookie 值。 在设置值时,SimpleCookie 会调用内置 str() 将值转�为字符串。 从 HTTP 接收的值�然��为字符串。

��

http.cookiejar 模�

处�网络 客户端 的 HTTP cookie。 http.cookiejar 和 http.cookies 模�相互没有�赖关系。

RFC 2109 - HTTP状�管�机制

这是本模�实现的状�管�规范。

Morsel 对象¶

class http.cookies.Morsel¶

对键/值对的抽象,带有 RFC 2109 的部分属性。

morsel 对象类似于字典,它的键是一组常� --- �有效的 RFC 2109 属性,包括:

expires¶
path¶
comment¶
domain¶
max-age
secure¶
version¶
httponly¶
samesite¶

httponly 属性指明了该 cookie 仅在 HTTP 请求中传输,且�能通过 JavaScript 访问。这是为了�轻�些跨站脚本攻击的�害。

samesite 属性指明了�览器�得与跨站请求一起��该 cookie。这有助于�轻 CSRF 攻击的�害。此属性的有效值为 “Strict�和“Lax�。

键�区分大�写,默认值为 ''。

在 3.5 版本�生�更: 现在 __eq__() 会�时考虑 key 和 value。

在 3.7 版本�生�更: Attributes key, value and coded_value are read-only. Use set() for setting them.

在 3.8 版本�生�更: 增加对 samesite 属性的支�。

Morsel.value¶

Cookie的值。

Morsel.coded_value¶

编��的 cookie 值——也����的内容。

Morsel.key¶

cookie �称

Morsel.set(key, value, coded_value)¶

设置 key�value 和 coded_value 属性。

Morsel.isReservedKey(K)¶

判断 K 是�属于 Morsel 的键。

Morsel.output(attrs=None, header='Set-Cookie:')¶

返回 morsel 的字符串形�,适用于作为 HTTP 头部信�进行��。默认包�所有属性,除�给出 attrs 属性列表。header 默认为 "Set-Cookie:"。

Morsel.js_output(attrs=None)¶

返回一段�供嵌入的 JavaScript 代�,若在支� JavaScript 的�览器上�行,其作用如��� HTTP 头部信�一样。

attrs 的�义与 output() 的相�。

Morsel.OutputString(attrs=None)¶

返回 morsel 的字符串形�,�� HTTP 或 JavaScript 数�。

attrs 的�义与 output() 的相�。

Morsel.update(values)¶

用字典 values 中的值更新 morsel 字典中的值。若有 values 字典中的键�是有效的 RFC 2109 属性,则会触�错误。

在 3.5 版本�生�更: 无效键会触�错误。

Morsel.copy(value)¶

返回 morsel 对象的浅表�制副本。

在 3.5 版本�生�更: 返回一个 morsel 对象,而�字典。

Morsel.setdefault(key, value=None)¶

若 key �是有效的 RFC 2109 属性则触�错误,�则与 dict.setdefault() 相�。

示例¶

以下例�演示了 http.cookies 模�的用法。

>>> from http import cookies
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> print(C) # generate HTTP headers
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> print(C.output()) # same thing
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> C = cookies.SimpleCookie()
>>> C["rocky"] = "road"
>>> C["rocky"]["path"] = "/cookie"
>>> print(C.output(header="Cookie:"))
Cookie: rocky=road; Path=/cookie
>>> print(C.output(attrs=[], header="Cookie:"))
Cookie: rocky=road
>>> C = cookies.SimpleCookie()
>>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header)
>>> print(C)
Set-Cookie: chips=ahoy
Set-Cookie: vienna=finger
>>> C = cookies.SimpleCookie()
>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
>>> print(C)
Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"
>>> C = cookies.SimpleCookie()
>>> C["oreo"] = "doublestuff"
>>> C["oreo"]["path"] = "/"
>>> print(C)
Set-Cookie: oreo=doublestuff; Path=/
>>> C = cookies.SimpleCookie()
>>> C["twix"] = "none for you"
>>> C["twix"].value
'none for you'
>>> C = cookies.SimpleCookie()
>>> C["number"] = 7 # equivalent to C["number"] = str(7)
>>> C["string"] = "seven"
>>> C["number"].value
'7'
>>> C["string"].value
'seven'
>>> print(C)
Set-Cookie: number=7
Set-Cookie: string=seven