“Python/docs/3.9/library/http.cookies”的版本间差异

来自菜鸟教程
Python/docs/3.9/library/http.cookies
跳转至:导航、​搜索
(autoload)
 
(Page commit)
 
第1行: 第1行:
 +
{{DISPLAYTITLE:http.cookies — HTTP 状态管理 — Python 文档}}
 
<div id="module-http.cookies" class="section">
 
<div id="module-http.cookies" class="section">
  
 
<span id="http-cookies-http-state-management"></span>
 
<span id="http-cookies-http-state-management"></span>
= [[#module-http.cookies|<code>http.cookies</code>]] --- HTTP state management =
+
= http.cookies HTTP 状态管理 =
  
'''Source code:''' [https://github.com/python/cpython/tree/3.9/Lib/http/cookies.py Lib/http/cookies.py]
+
'''源代码:''' [[#id1|<span id="id2" class="problematic">:source:`Lib/http/cookies.py`</span>]]
  
The [[#module-http.cookies|<code>http.cookies</code>]] module defines classes for abstracting the concept of
 
cookies, an HTTP state management mechanism. It supports both simple string-only
 
cookies, and provides an abstraction for having any serializable data-type as
 
cookie value.
 
  
The module formerly strictly applied the parsing rules described in the
+
-----
<span id="index-0" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] and <span id="index-1" class="target"></span>[https://tools.ietf.org/html/rfc2068.html '''RFC 2068'''] specifications. It has since been discovered that
 
MSIE 3.0x doesn't follow the character rules outlined in those specs and also
 
many current day browsers and servers have relaxed parsing rules when comes to
 
Cookie handling. As a result, the parsing rules used are a bit less strict.
 
  
The character set, [[../string#string|<code>string.ascii_letters</code>]], [[../string#string|<code>string.digits</code>]] and
+
[[#module-http.cookies|http.cookies]] 模块定义了用于抽象 cookie 概念的类,cookie 是一种 HTTP 状态管理机制。 它支持简单的纯字符串 cookie,并提供了一个抽象,用于将任何可序列化的数据类型作为 cookie 值。
<code>!#$%&amp;'*+-.^_`|~:</code> denote the set of valid characters allowed by this module
+
 
in Cookie name (as [[#http.cookies.Morsel.key|<code>key</code>]]).
+
该模块以前严格应用了 <span id="index-0" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] 和 <span id="index-1" class="target"></span>[https://tools.ietf.org/html/rfc2068.html RFC 2068] 规范中描述的解析规则。 后来发现,MSIE 3.0x 不遵循这些规范中概述的字符规则,而且当今许多浏览器和服务器在处理 Cookie 时都放宽了解析规则。 因此,使用的解析规则不太严格。
 +
 
 +
字符集 [[../string#string|string.ascii_letters]][[../string#string|string.digits]] <code>!#$%&amp;'*+-.^_`|~:</code> 表示该模块在 Cookie 名称中允许的有效字符集(如 key[ X171X])。
  
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<span class="versionmodified changed">在 3.3 版更改: </span>Allowed ':' as a valid Cookie name character.
+
<span class="versionmodified changed">在 3.3 版中更改:</span>允许 ':' 作为有效的 Cookie 名称字符。
  
  
第29行: 第24行:
 
<div class="admonition note">
 
<div class="admonition note">
  
注解
+
笔记
  
On encountering an invalid cookie, [[#http.cookies.CookieError|<code>CookieError</code>]] is raised, so if your
+
在遇到无效 cookie 时,会引发 [[#http.cookies.CookieError|CookieError]],因此如果您的 cookie 数据来自浏览器,您应该始终为无效数据做好准备并在解析时捕获 [[#http.cookies.CookieError|CookieError]]
cookie data comes from a browser you should always prepare for invalid data
 
and catch [[#http.cookies.CookieError|<code>CookieError</code>]] on parsing.
 
  
  
 
</div>
 
</div>
; ''exception'' <code>http.cookies.</code><code>CookieError</code>
+
; ''<span class="pre">exception</span>'' <span class="sig-prename descclassname"><span class="pre">http.cookies.</span></span><span class="sig-name descname"><span class="pre">CookieError</span></span>
: Exception failing because of <span id="index-2" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] invalidity: incorrect attributes, incorrect ''Set-Cookie'' header, etc.
+
: 由于 <span id="index-2" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] 无效,异常失败:不正确的属性、不正确的 ''Set-Cookie'' 标头等。
  
 
<dl>
 
<dl>
<dt>''class'' <code>http.cookies.</code><code>BaseCookie</code><span class="sig-paren">(</span><span class="optional">[</span>''input''<span class="optional">]</span><span class="sig-paren">)</span></dt>
+
<dt>''<span class="pre">class</span>'' <span class="sig-prename descclassname"><span class="pre">http.cookies.</span></span><span class="sig-name descname"><span class="pre">BaseCookie</span></span><span class="sig-paren">(</span><span class="optional">[</span>''<span class="pre">input</span>''<span class="optional">]</span><span class="sig-paren">)</span></dt>
<dd><p>This class is a dictionary-like object whose keys are strings and whose values
+
<dd><p>这个类是一个类似字典的对象,其键是字符串,其值是 [[#http.cookies.Morsel|Morsel]] 实例。 请注意,将键设置为值后,该值首先转换为包含键和值的 [[#http.cookies.Morsel|Morsel]]</p>
are [[#http.cookies.Morsel|<code>Morsel</code>]] instances. Note that upon setting a key to a value, the
+
<p>如果给出 ''input'',则将其传递给 [[#http.cookies.BaseCookie.load|load()]] 方法。</p></dd></dl>
value is first converted to a [[#http.cookies.Morsel|<code>Morsel</code>]] containing the key and the value.</p>
 
<p>If ''input'' is given, it is passed to the [[#http.cookies.BaseCookie.load|<code>load()</code>]] method.</p></dd></dl>
 
  
; ''class'' <code>http.cookies.</code><code>SimpleCookie</code><span class="sig-paren">(</span><span class="optional">[</span>''input''<span class="optional">]</span><span class="sig-paren">)</span>
+
; ''<span class="pre">class</span>'' <span class="sig-prename descclassname"><span class="pre">http.cookies.</span></span><span class="sig-name descname"><span class="pre">SimpleCookie</span></span><span class="sig-paren">(</span><span class="optional">[</span>''<span class="pre">input</span>''<span class="optional">]</span><span class="sig-paren">)</span>
: This class derives from [[#http.cookies.BaseCookie|<code>BaseCookie</code>]] and overrides <code>value_decode()</code> and <code>value_encode()</code>. SimpleCookie supports strings as cookie values. When setting the value, SimpleCookie calls the builtin [[../stdtypes#str|<code>str()</code>]] to convert the value to a string. Values received from HTTP are kept as strings.
+
: 此类派生自 [[#http.cookies.BaseCookie|BaseCookie]] 并覆盖 <code>value_decode()</code> <code>value_encode()</code>SimpleCookie 支持字符串作为 cookie 值。 在设置值时,SimpleCookie 调用内置的 [[../stdtypes#str|str()]] 将值转换为字符串。 从 HTTP 接收的值保留为字符串。
  
 
<div class="admonition seealso">
 
<div class="admonition seealso">
  
参见
+
也可以看看
  
; Module [[../http.cookiejar#module-http|<code>http.cookiejar</code>]]
+
; 模块 [[../http.cookiejar#module-http|http.cookiejar]]
: HTTP cookie handling for web ''clients''. The [[../http.cookiejar#module-http|<code>http.cookiejar</code>]] and [[#module-http.cookies|<code>http.cookies</code>]] modules do not depend on each other.
+
: Web ''客户端'' 的 HTTP cookie 处理。 [[../http.cookiejar#module-http|http.cookiejar]] [[#module-http.cookies|http.cookies]] 模块不相互依赖。
; <span id="index-3" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] - HTTP State Management Mechanism
+
; <span id="index-3" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] - HTTP 状态管理机制
: This is the state management specification implemented by this module.
+
: 这是该模块实现的状态管理规范。
  
  
第63行: 第54行:
 
<div id="cookie-objects" class="section">
 
<div id="cookie-objects" class="section">
  
<span id="id1"></span>
+
<span id="id3"></span>
== Cookie Objects ==
+
== Cookie 对象 ==
  
; <code>BaseCookie.</code><code>value_decode</code><span class="sig-paren">(</span>''<span class="n">val</span>''<span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">BaseCookie.</span></span><span class="sig-name descname"><span class="pre">value_decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">val</span></span>''<span class="sig-paren">)</span>
: Return a tuple <code>(real_value, coded_value)</code> from a string representation. <code>real_value</code> can be any type. This method does no decoding in [[#http.cookies.BaseCookie|<code>BaseCookie</code>]] --- it exists so it can be overridden.
+
: 从字符串表示中返回一个元组 <code>(real_value, coded_value)</code><code>real_value</code> 可以是任何类型。 这个方法在 [[#http.cookies.BaseCookie|BaseCookie]] 中没有解码——它存在所以它可以被覆盖。
  
 
<dl>
 
<dl>
<dt><code>BaseCookie.</code><code>value_encode</code><span class="sig-paren">(</span>''<span class="n">val</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">BaseCookie.</span></span><span class="sig-name descname"><span class="pre">value_encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">val</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return a tuple <code>(real_value, coded_value)</code>. ''val'' can be any type, but
+
<dd><p>返回一个元组 <code>(real_value, coded_value)</code>''val'' 可以是任何类型,但 <code>coded_value</code> 将始终转换为字符串。 这个方法在 [[#http.cookies.BaseCookie|BaseCookie]] 中没有编码——它存在所以它可以被覆盖。</p>
<code>coded_value</code> will always be converted to a string.
+
<p>一般来说,[[#http.cookies.BaseCookie.value_encode|value_encode()]][[#http.cookies.BaseCookie.value_decode|value_decode()]]应该是''value_decode''范围的倒数。</p></dd></dl>
This method does no encoding in [[#http.cookies.BaseCookie|<code>BaseCookie</code>]] --- it exists so it can
 
be overridden.</p>
 
<p>In general, it should be the case that [[#http.cookies.BaseCookie.value_encode|<code>value_encode()</code>]] and
 
[[#http.cookies.BaseCookie.value_decode|<code>value_decode()</code>]] are inverses on the range of ''value_decode''.</p></dd></dl>
 
  
; <code>BaseCookie.</code><code>output</code><span class="sig-paren">(</span>''<span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span>'', ''<span class="n">header</span><span class="o">=</span><span class="default_value">'Set-Cookie:'</span>'', ''<span class="n">sep</span><span class="o">=</span><span class="default_value">'\\r\\n'</span>''<span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">BaseCookie.</span></span><span class="sig-name descname"><span class="pre">output</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">attrs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>'', ''<span class="n"><span class="pre">header</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'Set-Cookie:'</span></span>'', ''<span class="n"><span class="pre">sep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'\\r\\n'</span></span>''<span class="sig-paren">)</span>
: Return a string representation suitable to be sent as HTTP headers. ''attrs'' and ''header'' are sent to each [[#http.cookies.Morsel|<code>Morsel</code>]]'s [[#http.cookies.BaseCookie.output|<code>output()</code>]] method. ''sep'' is used to join the headers together, and is by default the combination <code>'\r\n'</code> (CRLF).
+
: 返回适合作为 HTTP 标头发送的字符串表示形式。 ''attrs'' ''header'' 被发送到每个 [[#http.cookies.Morsel|Morsel]] [[#http.cookies.BaseCookie.output|output()]] 方法。 ''sep'' 用于将标头连接在一起,默认情况下是组合 <code>'\r\n'</code> (CRLF)
  
 
<dl>
 
<dl>
<dt><code>BaseCookie.</code><code>js_output</code><span class="sig-paren">(</span>''<span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">BaseCookie.</span></span><span class="sig-name descname"><span class="pre">js_output</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">attrs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return an embeddable JavaScript snippet, which, if run on a browser which
+
<dd><p>返回一个可嵌入的 JavaScript 片段,如果在支持 JavaScript 的浏览器上运行,它的行为将与发送 HTTP 标头一样。</p>
supports JavaScript, will act the same as if the HTTP headers was sent.</p>
+
<p>''attrs'' 的含义与 [[#http.cookies.BaseCookie.output|output()]] 中的含义相同。</p></dd></dl>
<p>The meaning for ''attrs'' is the same as in [[#http.cookies.BaseCookie.output|<code>output()</code>]].</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>BaseCookie.</code><code>load</code><span class="sig-paren">(</span>''<span class="n">rawdata</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">BaseCookie.</span></span><span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">rawdata</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>If ''rawdata'' is a string, parse it as an <code>HTTP_COOKIE</code> and add the values
+
<dd><p>如果 ''rawdata'' 是字符串,则将其解析为 <code>HTTP_COOKIE</code> 并将在那里找到的值添加为 [[#http.cookies.Morsel|Morsel]]s。 如果是字典,则相当于:</p>
found there as [[#http.cookies.Morsel|<code>Morsel</code>]]s. If it is a dictionary, it is equivalent to:</p>
 
 
<div class="highlight-python3 notranslate">
 
<div class="highlight-python3 notranslate">
  
 
<div class="highlight">
 
<div class="highlight">
  
<pre>for k, v in rawdata.items():
+
<syntaxhighlight lang="python3">for k, v in rawdata.items():
     cookie[k] = v</pre>
+
     cookie[k] = v</syntaxhighlight>
  
 
</div>
 
</div>
第106行: 第91行:
 
<div id="morsel-objects" class="section">
 
<div id="morsel-objects" class="section">
  
<span id="id2"></span>
+
<span id="id4"></span>
== Morsel Objects ==
+
== 小物件 ==
  
 
<dl>
 
<dl>
<dt>''class'' <code>http.cookies.</code><code>Morsel</code></dt>
+
<dt>''<span class="pre">class</span>'' <span class="sig-prename descclassname"><span class="pre">http.cookies.</span></span><span class="sig-name descname"><span class="pre">Morsel</span></span></dt>
<dd><p>Abstract a key/value pair, which has some <span id="index-4" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] attributes.</p>
+
<dd><p>抽象一个键/值对,它有一些 <span id="index-4" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] 属性。</p>
<p>Morsels are dictionary-like objects, whose set of keys is constant --- the valid
+
<p>Morsels 是类似字典的对象,其键集是常量——有效的 <span id="index-5" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] 属性,它们是</p>
<span id="index-5" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] attributes, which are</p>
 
 
<ul>
 
<ul>
 
<li><p><code>expires</code></p></li>
 
<li><p><code>expires</code></p></li>
第125行: 第109行:
 
<li><p><code>samesite</code></p></li></ul>
 
<li><p><code>samesite</code></p></li></ul>
  
<p>The attribute <code>httponly</code> specifies that the cookie is only transferred
+
<p>属性 <code>httponly</code> 指定 cookie 仅在 HTTP 请求中传输,不能通过 JavaScript 访问。 这旨在减轻某些形式的跨站点脚本。</p>
in HTTP requests, and is not accessible through JavaScript. This is intended
+
<p>属性 <code>samesite</code> 指定浏览器不允许将 cookie 与跨站点请求一起发送。 这有助于减轻 CSRF 攻击。 此属性的有效值为“Strict”和“Lax”。</p>
to mitigate some forms of cross-site scripting.</p>
+
<p>键不区分大小写,默认值为 <code>''</code></p>
<p>The attribute <code>samesite</code> specifies that the browser is not allowed to
 
send the cookie along with cross-site requests. This helps to mitigate CSRF
 
attacks. Valid values for this attribute are &quot;Strict&quot; and &quot;Lax&quot;.</p>
 
<p>The keys are case-insensitive and their default value is <code>''</code>.</p>
 
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">在 3.5 版更改: </span><code>__eq__()</code> now takes [[#http.cookies.Morsel.key|<code>key</code>]] and [[#http.cookies.Morsel.value|<code>value</code>]]
+
<p><span class="versionmodified changed">在 3.5 版更改:</span><code>__eq__()</code> 现在考虑 [[#http.cookies.Morsel.key|key]] [[#http.cookies.Morsel.value|value]]</p>
into account.</p>
 
  
 
</div>
 
</div>
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">3.7 版更改: </span>Attributes [[#http.cookies.Morsel.key|<code>key</code>]], [[#http.cookies.Morsel.value|<code>value</code>]] and
+
<p><span class="versionmodified changed"> 3.7 版更改: </span> 属性 [[#http.cookies.Morsel.key|key]][[#http.cookies.Morsel.value|value]] [[#http.cookies.Morsel.coded_value|coded_value]] 是只读的。 使用 [[#http.cookies.Morsel.set|set()]] 来设置它们。</p>
[[#http.cookies.Morsel.coded_value|<code>coded_value</code>]] are read-only. Use [[#http.cookies.Morsel.set|<code>set()</code>]] for
 
setting them.</p>
 
  
 
</div>
 
</div>
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">3.8 版更改: </span>Added support for the <code>samesite</code> attribute.</p>
+
<p><span class="versionmodified changed"> 3.8 版更改: </span> 添加了对 <code>samesite</code> 属性的支持。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
; <code>Morsel.</code><code>value</code>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">value</span></span>
: The value of the cookie.
+
: cookie 的值。
  
; <code>Morsel.</code><code>coded_value</code>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">coded_value</span></span>
: The encoded value of the cookie --- this is what should be sent.
+
: cookie 的编码值——这是应该发送的。
  
; <code>Morsel.</code><code>key</code>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">key</span></span>
: The name of the cookie.
+
: cookie 的名称。
  
; <code>Morsel.</code><code>set</code><span class="sig-paren">(</span>''<span class="n">key</span>'', ''<span class="n">value</span>'', ''<span class="n">coded_value</span>''<span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">key</span></span>'', ''<span class="n"><span class="pre">value</span></span>'', ''<span class="n"><span class="pre">coded_value</span></span>''<span class="sig-paren">)</span>
: Set the ''key'', ''value'' and ''coded_value'' attributes.
+
: 设置 ''key''''value'' ''coded_value'' 属性。
  
; <code>Morsel.</code><code>isReservedKey</code><span class="sig-paren">(</span>''<span class="n">K</span>''<span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">isReservedKey</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">K</span></span>''<span class="sig-paren">)</span>
: Whether ''K'' is a member of the set of keys of a [[#http.cookies.Morsel|<code>Morsel</code>]].
+
: ''K'' 是否是 [[#http.cookies.Morsel|Morsel]] 的键集的成员。
  
; <code>Morsel.</code><code>output</code><span class="sig-paren">(</span>''<span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span>'', ''<span class="n">header</span><span class="o">=</span><span class="default_value">'Set-Cookie:'</span>''<span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">output</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">attrs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>'', ''<span class="n"><span class="pre">header</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'Set-Cookie:'</span></span>''<span class="sig-paren">)</span>
: Return a string representation of the Morsel, suitable to be sent as an HTTP header. By default, all the attributes are included, unless ''attrs'' is given, in which case it should be a list of attributes to use. ''header'' is by default <code>&quot;Set-Cookie:&quot;</code>.
+
: 返回 Morsel 的字符串表示,适合作为 HTTP 标头发送。 默认情况下,所有属性都包含在内,除非给出 ''attrs'',在这种情况下,它应该是要使用的属性列表。 ''header'' 默认为 <code>&quot;Set-Cookie:&quot;</code>
  
 
<dl>
 
<dl>
<dt><code>Morsel.</code><code>js_output</code><span class="sig-paren">(</span>''<span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">js_output</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">attrs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return an embeddable JavaScript snippet, which, if run on a browser which
+
<dd><p>返回一个可嵌入的 JavaScript 片段,如果在支持 JavaScript 的浏览器上运行,它的行为与发送 HTTP 标头的行为相同。</p>
supports JavaScript, will act the same as if the HTTP header was sent.</p>
+
<p>''attrs'' 的含义与 [[#http.cookies.Morsel.output|output()]] 中的含义相同。</p></dd></dl>
<p>The meaning for ''attrs'' is the same as in [[#http.cookies.Morsel.output|<code>output()</code>]].</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>Morsel.</code><code>OutputString</code><span class="sig-paren">(</span>''<span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">OutputString</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">attrs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return a string representing the Morsel, without any surrounding HTTP or
+
<dd><p>返回一个表示 Morsel 的字符串,不包含任何 HTTP 或 JavaScript。</p>
JavaScript.</p>
+
<p>''attrs'' 的含义与 [[#http.cookies.Morsel.output|output()]] 中的含义相同。</p></dd></dl>
<p>The meaning for ''attrs'' is the same as in [[#http.cookies.Morsel.output|<code>output()</code>]].</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>Morsel.</code><code>update</code><span class="sig-paren">(</span>''<span class="n">values</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">update</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">values</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Update the values in the Morsel dictionary with the values in the dictionary
+
<dd><p>使用字典 ''values'' 中的值更新 Morsel 字典中的值。 如果 ''values'' dict 中的任何键不是有效的 <span id="index-6" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] 属性,则会引发错误。</p>
''values''. Raise an error if any of the keys in the ''values'' dict is not a
 
valid <span id="index-6" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] attribute.</p>
 
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">3.5 版更改: </span>an error is raised for invalid keys.</p>
+
<p><span class="versionmodified changed"> 3.5 版更改:</span> 无效密钥引发错误。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>Morsel.</code><code>copy</code><span class="sig-paren">(</span>''<span class="n">value</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">value</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return a shallow copy of the Morsel object.</p>
+
<dd><p>返回 Morsel 对象的浅拷贝。</p>
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">3.5 版更改: </span>return a Morsel object instead of a dict.</p>
+
<p><span class="versionmodified changed"> 3.5 版更改:</span> 返回一个 Morsel 对象而不是一个 dict。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
; <code>Morsel.</code><code>setdefault</code><span class="sig-paren">(</span>''<span class="n">key</span>'', ''<span class="n">value</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">Morsel.</span></span><span class="sig-name descname"><span class="pre">setdefault</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">key</span></span>'', ''<span class="n"><span class="pre">value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>''<span class="sig-paren">)</span>
: Raise an error if key is not a valid <span id="index-7" class="target"></span>[https://tools.ietf.org/html/rfc2109.html '''RFC 2109'''] attribute, otherwise behave the same as [[../stdtypes#dict|<code>dict.setdefault()</code>]].
+
: 如果密钥不是有效的 <span id="index-7" class="target"></span>[https://tools.ietf.org/html/rfc2109.html RFC 2109] 属性,则引发错误,否则行为与 [[../stdtypes#dict|dict.setdefault()]] 相同。
  
  
第209行: 第182行:
  
 
<span id="cookie-example"></span>
 
<span id="cookie-example"></span>
== Example ==
+
== 例子 ==
  
The following example demonstrates how to use the [[#module-http.cookies|<code>http.cookies</code>]] module.
+
以下示例演示了如何使用 [[#module-http.cookies|http.cookies]] 模块。
  
 
<div class="highlight-pycon3 notranslate">
 
<div class="highlight-pycon3 notranslate">
第217行: 第190行:
 
<div class="highlight">
 
<div class="highlight">
  
<pre>&gt;&gt;&gt; from http import cookies
+
<pre class="pycon3">&gt;&gt;&gt; from http import cookies
 
&gt;&gt;&gt; C = cookies.SimpleCookie()
 
&gt;&gt;&gt; C = cookies.SimpleCookie()
 
&gt;&gt;&gt; C[&quot;fig&quot;] = &quot;newton&quot;
 
&gt;&gt;&gt; C[&quot;fig&quot;] = &quot;newton&quot;
第268行: 第241行:
  
 
</div>
 
</div>
 +
 +
</div>
 +
<div class="clearer">
 +
 +
  
 
</div>
 
</div>
  
[[Category:Python 3.9 中文文档]]
+
[[Category:Python 3.9 文档]]

2021年10月31日 (日) 04:52的最新版本

http.cookies — HTTP 状态管理

源代码: :source:`Lib/http/cookies.py`



http.cookies 模块定义了用于抽象 cookie 概念的类,cookie 是一种 HTTP 状态管理机制。 它支持简单的纯字符串 cookie,并提供了一个抽象,用于将任何可序列化的数据类型作为 cookie 值。

该模块以前严格应用了 RFC 2109RFC 2068 规范中描述的解析规则。 后来发现,MSIE 3.0x 不遵循这些规范中概述的字符规则,而且当今许多浏览器和服务器在处理 Cookie 时都放宽了解析规则。 因此,使用的解析规则不太严格。

字符集 string.ascii_lettersstring.digits!#$%&'*+-.^_`|~: 表示该模块在 Cookie 名称中允许的有效字符集(如 key[ X171X])。

在 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
Web 客户端 的 HTTP cookie 处理。 http.cookiejarhttp.cookies 模块不相互依赖。
RFC 2109 - HTTP 状态管理机制
这是该模块实现的状态管理规范。


小物件

class http.cookies.Morsel

抽象一个键/值对,它有一些 RFC 2109 属性。

Morsels 是类似字典的对象,其键集是常量——有效的 RFC 2109 属性,它们是

  • expires

  • path

  • comment

  • domain

  • max-age

  • secure

  • version

  • httponly

  • samesite

属性 httponly 指定 cookie 仅在 HTTP 请求中传输,不能通过 JavaScript 访问。 这旨在减轻某些形式的跨站点脚本。

属性 samesite 指定浏览器不允许将 cookie 与跨站点请求一起发送。 这有助于减轻 CSRF 攻击。 此属性的有效值为“Strict”和“Lax”。

键不区分大小写,默认值为

在 3.5 版更改:__eq__() 现在考虑 keyvalue

3.7 版更改: 属性 keyvaluecoded_value 是只读的。 使用 set() 来设置它们。

3.8 版更改: 添加了对 samesite 属性的支持。

Morsel.value
cookie 的值。
Morsel.coded_value
cookie 的编码值——这是应该发送的。
Morsel.key
cookie 的名称。
Morsel.set(key, value, coded_value)
设置 keyvaluecoded_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 dict 中的任何键不是有效的 RFC 2109 属性,则会引发错误。

3.5 版更改: 无效密钥引发错误。

Morsel.copy(value)

返回 Morsel 对象的浅拷贝。

3.5 版更改: 返回一个 Morsel 对象而不是一个 dict。

Morsel.setdefault(key, value=None)
如果密钥不是有效的 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