Files
hustoj/web/python-docs/library/http.cookies.html
2025-03-09 17:10:56 +08:00

513 lines
43 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>http.cookies --- HTTP状态管理 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="http.cookiejar —— HTTP 客户端的 Cookie 处理" href="http.cookiejar.html" />
<link rel="prev" title="http.server --- HTTP 服务器" href="http.server.html" />
<link rel="canonical" href="https://docs.python.org/3/library/http.cookies.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code> --- HTTP状态管理</a><ul>
<li><a class="reference internal" href="#cookie-objects">Cookie 对象</a></li>
<li><a class="reference internal" href="#morsel-objects">Morsel 对象</a></li>
<li><a class="reference internal" href="#example">示例</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="http.server.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.server</span></code> --- HTTP 服务器</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="http.cookiejar.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> —— HTTP 客户端的 Cookie 处理</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/http.cookies.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/library/http.cookies.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="http.cookiejar.html" title="http.cookiejar —— HTTP 客户端的 Cookie 处理"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="http.server.html" title="http.server --- HTTP 服务器"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">互联网协议和支持</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-http.cookies">
<span id="http-cookies-http-state-management"></span><h1><a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code></a> --- HTTP状态管理<a class="headerlink" href="#module-http.cookies" title="永久链接至标题"></a></h1>
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/http/cookies.py">Lib/http/cookies.py</a></p>
<hr class="docutils" />
<p><a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code></a> 模块定义的类将 cookie 的概念抽象了出来,这是一种 HTTP 状态的管理机制。它既支持简单的纯字符串形式的 cookie也为任何可序列化数据类型的 cookie 提供抽象。</p>
<p>以前,该模块严格套用 <span class="target" id="index-16"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a><span class="target" id="index-17"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2068.html"><strong>RFC 2068</strong></a> 规范中描述的解析规则。后来人们发现MSIE 3.0 并不遵循这些规范中的字符规则,而且目前许多浏览器和服务器在处理 cookie 时也放宽了解析规则。 因此,这里用到的解析规则没有那么严格。</p>
<p>字符集 <a class="reference internal" href="string.html#string.ascii_letters" title="string.ascii_letters"><code class="xref py py-data docutils literal notranslate"><span class="pre">string.ascii_letters</span></code></a><a class="reference internal" href="string.html#string.digits" title="string.digits"><code class="xref py py-data docutils literal notranslate"><span class="pre">string.digits</span></code></a><code class="docutils literal notranslate"><span class="pre">!#$%&amp;'*+-.^_`|~:</span></code> 给出了本模块允许出现在 cookie 名称中的有效字符集(如 <a class="reference internal" href="#http.cookies.Morsel.key" title="http.cookies.Morsel.key"><code class="xref py py-attr docutils literal notranslate"><span class="pre">key</span></code></a>)。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.3 版更改: </span>“:”字符可用于有效的 cookie 名称。</p>
</div>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>当遇到无效 cookie 时会触发 <a class="reference internal" href="#http.cookies.CookieError" title="http.cookies.CookieError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">CookieError</span></code></a>,所以若 cookie 数据来自浏览器,一定要做好应对无效数据的准备,并在解析时捕获 <a class="reference internal" href="#http.cookies.CookieError" title="http.cookies.CookieError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">CookieError</span></code></a></p>
</div>
<dl class="exception">
<dt id="http.cookies.CookieError">
<em class="property">exception </em><code class="sig-prename descclassname">http.cookies.</code><code class="sig-name descname">CookieError</code><a class="headerlink" href="#http.cookies.CookieError" title="永久链接至目标"></a></dt>
<dd><p>出现异常的原因,可能是不符合 <span class="target" id="index-18"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> :属性不正确、<em class="mailheader">Set-Cookie</em> 头部信息不正确等等。</p>
</dd></dl>
<dl class="class">
<dt id="http.cookies.BaseCookie">
<em class="property">class </em><code class="sig-prename descclassname">http.cookies.</code><code class="sig-name descname">BaseCookie</code><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param">input</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.BaseCookie" title="永久链接至目标"></a></dt>
<dd><p>类似字典的对象,字典键为字符串,字典值是 <a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal notranslate"><span class="pre">Morsel</span></code></a> 实例。请注意,在将键值关联时,首先会把值转换为包含键和值的 <a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal notranslate"><span class="pre">Morsel</span></code></a> 对象。</p>
<p>若给出 <em>input</em> ,将会传给 <a class="reference internal" href="#http.cookies.BaseCookie.load" title="http.cookies.BaseCookie.load"><code class="xref py py-meth docutils literal notranslate"><span class="pre">load()</span></code></a> 方法。</p>
</dd></dl>
<dl class="class">
<dt id="http.cookies.SimpleCookie">
<em class="property">class </em><code class="sig-prename descclassname">http.cookies.</code><code class="sig-name descname">SimpleCookie</code><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param">input</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.SimpleCookie" title="永久链接至目标"></a></dt>
<dd><p>该类派生于 <a class="reference internal" href="#http.cookies.BaseCookie" title="http.cookies.BaseCookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseCookie</span></code></a>,并覆盖了 <code class="xref py py-meth docutils literal notranslate"><span class="pre">value_decode()</span></code><code class="xref py py-meth docutils literal notranslate"><span class="pre">value_encode()</span></code> 方法。SimpleCookie 允许用字符串作为 cookie 值。在设置值时SimpleCookie 将调用内置的 <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-func docutils literal notranslate"><span class="pre">str()</span></code></a> 将其转换为字符串。从 HTTP 接收到的值将作为字符串保存。</p>
</dd></dl>
<div class="admonition seealso">
<p class="admonition-title">参见</p>
<dl class="simple">
<dt><a class="reference internal" href="http.cookiejar.html#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> 模块</dt><dd><p>处理网络 <em>客户端</em> 的 HTTP cookie。 <a class="reference internal" href="http.cookiejar.html#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a><a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code></a> 模块相互没有依赖关系。</p>
</dd>
<dt><span class="target" id="index-19"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> - HTTP状态管理机制</dt><dd><p>这是本模块实现的状态管理规范。</p>
</dd>
</dl>
</div>
<section id="cookie-objects">
<span id="id1"></span><h2>Cookie 对象<a class="headerlink" href="#cookie-objects" title="永久链接至标题"></a></h2>
<dl class="method">
<dt id="http.cookies.BaseCookie.value_decode">
<code class="sig-prename descclassname">BaseCookie.</code><code class="sig-name descname">value_decode</code><span class="sig-paren">(</span><em class="sig-param">val</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.BaseCookie.value_decode" title="永久链接至目标"></a></dt>
<dd><p>由字符串返回元组 <code class="docutils literal notranslate"><span class="pre">(real_value,</span> <span class="pre">coded_value)</span></code><code class="docutils literal notranslate"><span class="pre">real_value</span></code> 可为任意类型。<a class="reference internal" href="#http.cookies.BaseCookie" title="http.cookies.BaseCookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseCookie</span></code></a> 中的此方法未实现任何解码工作——只为能被子类重写。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.BaseCookie.value_encode">
<code class="sig-prename descclassname">BaseCookie.</code><code class="sig-name descname">value_encode</code><span class="sig-paren">(</span><em class="sig-param">val</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.BaseCookie.value_encode" title="永久链接至目标"></a></dt>
<dd><p>返回元组 <code class="docutils literal notranslate"><span class="pre">(real_value,</span> <span class="pre">coded_value)</span></code><em>val</em> 可为任意类型,<code class="docutils literal notranslate"><span class="pre">coded_value</span></code> 则会转换为字符串。 <a class="reference internal" href="#http.cookies.BaseCookie" title="http.cookies.BaseCookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseCookie</span></code></a> 中的此方法未实现任何编码工作——只为能被子类重写。</p>
<p>通常在 <em>value_decode</em> 的取值范围内,<a class="reference internal" href="#http.cookies.BaseCookie.value_encode" title="http.cookies.BaseCookie.value_encode"><code class="xref py py-meth docutils literal notranslate"><span class="pre">value_encode()</span></code></a><a class="reference internal" href="#http.cookies.BaseCookie.value_decode" title="http.cookies.BaseCookie.value_decode"><code class="xref py py-meth docutils literal notranslate"><span class="pre">value_decode()</span></code></a> 应为可互逆操作。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.BaseCookie.output">
<code class="sig-prename descclassname">BaseCookie.</code><code class="sig-name descname">output</code><span class="sig-paren">(</span><em class="sig-param">attrs=None</em>, <em class="sig-param">header='Set-Cookie:'</em>, <em class="sig-param">sep='\r\n'</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.BaseCookie.output" title="永久链接至目标"></a></dt>
<dd><p>返回可作为 HTTP 标头信息发送的字符串表示。 <em>attrs</em><em>header</em> 会传给每个 <a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal notranslate"><span class="pre">Morsel</span></code></a><a class="reference internal" href="#http.cookies.BaseCookie.output" title="http.cookies.BaseCookie.output"><code class="xref py py-meth docutils literal notranslate"><span class="pre">output()</span></code></a> 方法。 <em>sep</em> 用来将标头连接在一起,默认为 <code class="docutils literal notranslate"><span class="pre">'\r\n'</span></code> (CRLF) 组合。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.BaseCookie.js_output">
<code class="sig-prename descclassname">BaseCookie.</code><code class="sig-name descname">js_output</code><span class="sig-paren">(</span><em class="sig-param">attrs=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.BaseCookie.js_output" title="永久链接至目标"></a></dt>
<dd><p>返回一段可供嵌入的 JavaScript 代码,若在支持 JavaScript 的浏览器上运行,其作用如同发送 HTTP 头部信息一样。</p>
<p><em>attrs</em> 的含义与 <a class="reference internal" href="#http.cookies.BaseCookie.output" title="http.cookies.BaseCookie.output"><code class="xref py py-meth docutils literal notranslate"><span class="pre">output()</span></code></a> 的相同。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.BaseCookie.load">
<code class="sig-prename descclassname">BaseCookie.</code><code class="sig-name descname">load</code><span class="sig-paren">(</span><em class="sig-param">rawdata</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.BaseCookie.load" title="永久链接至目标"></a></dt>
<dd><p><em>rawdata</em> 为字符串,则会作为 <code class="docutils literal notranslate"><span class="pre">HTTP_COOKIE</span></code> 进行解析,并将找到的值添加为 <a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal notranslate"><span class="pre">Morsel</span></code></a>。 如果是字典值,则等价于:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">rawdata</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">cookie</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</pre></div>
</div>
</dd></dl>
</section>
<section id="morsel-objects">
<span id="id2"></span><h2>Morsel 对象<a class="headerlink" href="#morsel-objects" title="永久链接至标题"></a></h2>
<dl class="class">
<dt id="http.cookies.Morsel">
<em class="property">class </em><code class="sig-prename descclassname">http.cookies.</code><code class="sig-name descname">Morsel</code><a class="headerlink" href="#http.cookies.Morsel" title="永久链接至目标"></a></dt>
<dd><p>对键/值对的抽象,带有 <span class="target" id="index-20"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> 的部分属性。</p>
<p>morsel 对象类似于字典,键的组成是常量——均为有效的 <span class="target" id="index-21"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> 属性,包括:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">expires</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">path</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">comment</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">domain</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">max-age</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">secure</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">version</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">httponly</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">samesite</span></code></p></li>
</ul>
<p><code class="xref py py-attr docutils literal notranslate"><span class="pre">httponly</span></code> 属性指明了该 cookie 仅在 HTTP 请求中传输,且不能通过 JavaScript 访问。这是为了减轻某些跨站脚本攻击的危害。</p>
<p><code class="xref py py-attr docutils literal notranslate"><span class="pre">samesite</span></code> 属性指明了浏览器不得与跨站请求一起发送该 cookie。这有助于减轻 CSRF 攻击的危害。此属性的有效值为 “Strict”和“Lax”。</p>
<p>键不区分大小写,默认值为 <code class="docutils literal notranslate"><span class="pre">''</span></code></p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.5 版更改: </span>现在,<code class="xref py py-meth docutils literal notranslate"><span class="pre">__eq__()</span></code> 会同时考虑 <a class="reference internal" href="#http.cookies.Morsel.key" title="http.cookies.Morsel.key"><code class="xref py py-attr docutils literal notranslate"><span class="pre">key</span></code></a><a class="reference internal" href="#http.cookies.Morsel.value" title="http.cookies.Morsel.value"><code class="xref py py-attr docutils literal notranslate"><span class="pre">value</span></code></a></p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.7 版更改: </span>Attributes <a class="reference internal" href="#http.cookies.Morsel.key" title="http.cookies.Morsel.key"><code class="xref py py-attr docutils literal notranslate"><span class="pre">key</span></code></a>, <a class="reference internal" href="#http.cookies.Morsel.value" title="http.cookies.Morsel.value"><code class="xref py py-attr docutils literal notranslate"><span class="pre">value</span></code></a> and
<a class="reference internal" href="#http.cookies.Morsel.coded_value" title="http.cookies.Morsel.coded_value"><code class="xref py py-attr docutils literal notranslate"><span class="pre">coded_value</span></code></a> are read-only. Use <a class="reference internal" href="#http.cookies.Morsel.set" title="http.cookies.Morsel.set"><code class="xref py py-meth docutils literal notranslate"><span class="pre">set()</span></code></a> for
setting them.</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.8 版更改: </span>增加对 <code class="xref py py-attr docutils literal notranslate"><span class="pre">samesite</span></code> 属性的支持。</p>
</div>
</dd></dl>
<dl class="attribute">
<dt id="http.cookies.Morsel.value">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">value</code><a class="headerlink" href="#http.cookies.Morsel.value" title="永久链接至目标"></a></dt>
<dd><p>Cookie的值。</p>
</dd></dl>
<dl class="attribute">
<dt id="http.cookies.Morsel.coded_value">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">coded_value</code><a class="headerlink" href="#http.cookies.Morsel.coded_value" title="永久链接至目标"></a></dt>
<dd><p>编码后的 cookie 值——也即要发送的内容。</p>
</dd></dl>
<dl class="attribute">
<dt id="http.cookies.Morsel.key">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">key</code><a class="headerlink" href="#http.cookies.Morsel.key" title="永久链接至目标"></a></dt>
<dd><p>cookie 名称</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.set">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">set</code><span class="sig-paren">(</span><em class="sig-param">key</em>, <em class="sig-param">value</em>, <em class="sig-param">coded_value</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.set" title="永久链接至目标"></a></dt>
<dd><p>设置 <em>key</em><em>value</em><em>coded_value</em> 属性。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.isReservedKey">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">isReservedKey</code><span class="sig-paren">(</span><em class="sig-param">K</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.isReservedKey" title="永久链接至目标"></a></dt>
<dd><p><em>K</em> 是否属于 <a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal notranslate"><span class="pre">Morsel</span></code></a> 的键。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.output">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">output</code><span class="sig-paren">(</span><em class="sig-param">attrs=None</em>, <em class="sig-param">header='Set-Cookie:'</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.output" title="永久链接至目标"></a></dt>
<dd><p>返回 morsel 的字符串形式,适用于作为 HTTP 头部信息进行发送。默认包含所有属性,除非给出 <em>attrs</em> 属性列表。<em>header</em> 默认为 <code class="docutils literal notranslate"><span class="pre">&quot;Set-Cookie:&quot;</span></code></p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.js_output">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">js_output</code><span class="sig-paren">(</span><em class="sig-param">attrs=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.js_output" title="永久链接至目标"></a></dt>
<dd><p>返回一段可供嵌入的 JavaScript 代码,若在支持 JavaScript 的浏览器上运行,其作用如同发送 HTTP 头部信息一样。</p>
<p><em>attrs</em> 的含义与 <a class="reference internal" href="#http.cookies.Morsel.output" title="http.cookies.Morsel.output"><code class="xref py py-meth docutils literal notranslate"><span class="pre">output()</span></code></a> 的相同。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.OutputString">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">OutputString</code><span class="sig-paren">(</span><em class="sig-param">attrs=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.OutputString" title="永久链接至目标"></a></dt>
<dd><p>返回 morsel 的字符串形式,不含 HTTP 或 JavaScript 数据。</p>
<p><em>attrs</em> 的含义与 <a class="reference internal" href="#http.cookies.Morsel.output" title="http.cookies.Morsel.output"><code class="xref py py-meth docutils literal notranslate"><span class="pre">output()</span></code></a> 的相同。</p>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.update">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">update</code><span class="sig-paren">(</span><em class="sig-param">values</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.update" title="永久链接至目标"></a></dt>
<dd><p>用字典 <em>values</em> 中的值更新 morsel 字典中的值。若有 <em>values</em> 字典中的键不是有效的 <span class="target" id="index-22"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> 属性,则会触发错误。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.5 版更改: </span>无效键会触发错误。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.copy">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">copy</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.copy" title="永久链接至目标"></a></dt>
<dd><p>返回 morsel 对象的浅表复制副本。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.5 版更改: </span>返回一个 morsel 对象,而非字典。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="http.cookies.Morsel.setdefault">
<code class="sig-prename descclassname">Morsel.</code><code class="sig-name descname">setdefault</code><span class="sig-paren">(</span><em class="sig-param">key</em>, <em class="sig-param">value=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookies.Morsel.setdefault" title="永久链接至目标"></a></dt>
<dd><p>若 key 不是有效的 <span class="target" id="index-23"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> 属性则触发错误,否则与 <a class="reference internal" href="stdtypes.html#dict.setdefault" title="dict.setdefault"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dict.setdefault()</span></code></a> 相同。</p>
</dd></dl>
</section>
<section id="example">
<span id="cookie-example"></span><h2>示例<a class="headerlink" href="#example" title="永久链接至标题"></a></h2>
<p>以下例子演示了 <a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code></a> 模块的用法。</p>
<div class="highlight-pycon3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">http</span> <span class="kn">import</span> <span class="n">cookies</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;fig&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;newton&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;sugar&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;wafer&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span> <span class="c1"># generate HTTP headers</span>
<span class="go">Set-Cookie: fig=newton</span>
<span class="go">Set-Cookie: sugar=wafer</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">output</span><span class="p">())</span> <span class="c1"># same thing</span>
<span class="go">Set-Cookie: fig=newton</span>
<span class="go">Set-Cookie: sugar=wafer</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;rocky&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;road&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;rocky&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;/cookie&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="s2">&quot;Cookie:&quot;</span><span class="p">))</span>
<span class="go">Cookie: rocky=road; Path=/cookie</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">[],</span> <span class="n">header</span><span class="o">=</span><span class="s2">&quot;Cookie:&quot;</span><span class="p">))</span>
<span class="go">Cookie: rocky=road</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">&quot;chips=ahoy; vienna=finger&quot;</span><span class="p">)</span> <span class="c1"># load from a string (HTTP header)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: chips=ahoy</span>
<span class="go">Set-Cookie: vienna=finger</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s1">&#39;keebler=&quot;E=everybody; L=</span><span class="se">\\</span><span class="s1">&quot;Loves</span><span class="se">\\</span><span class="s1">&quot;; fudge=</span><span class="se">\\</span><span class="s1">012;&quot;;&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: keebler=&quot;E=everybody; L=\&quot;Loves\&quot;; fudge=\012;&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;oreo&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;doublestuff&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;oreo&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;/&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: oreo=doublestuff; Path=/</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;twix&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;none for you&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;twix&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="go">&#39;none for you&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;number&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">7</span> <span class="c1"># equivalent to C[&quot;number&quot;] = str(7)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;string&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;seven&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;number&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="go">&#39;7&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">&quot;string&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="go">&#39;seven&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: number=7</span>
<span class="go">Set-Cookie: string=seven</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code> --- HTTP状态管理</a><ul>
<li><a class="reference internal" href="#cookie-objects">Cookie 对象</a></li>
<li><a class="reference internal" href="#morsel-objects">Morsel 对象</a></li>
<li><a class="reference internal" href="#example">示例</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="http.server.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.server</span></code> --- HTTP 服务器</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="http.cookiejar.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> —— HTTP 客户端的 Cookie 处理</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/http.cookies.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="http.cookiejar.html" title="http.cookiejar —— HTTP 客户端的 Cookie 处理"
>下一页</a> |</li>
<li class="right" >
<a href="http.server.html" title="http.server --- HTTP 服务器"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="internet.html" >互联网协议和支持</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>