【问题标题】:Cookies in pythonpython中的cookies
【发布时间】:2014-06-15 00:24:33
【问题描述】:

我正在尝试在 python 中编写一个脚本,该脚本使用 Cookie 库来设置 cookie。我写了以下方法:

import uuid
import Cookie
import sys
import os

def send_cookie(key, value, max_age):
    cookie = Cookie.SimpleCookie()
    cookie[key]=value
    cookie[key]['max-age']=max_age
    print cookie.output()

问题是当我多次调用此方法时,例如 send_cookie('foo',123,1000)、send_cookie('foo2',12345,1000)。 我会“假设”这些 cookie 存储在我的计算机上。当我打印 os.environ['HTTP_COOKIE'] 时,我没有看到我在那里设置的任何 cookie。

【问题讨论】:

    标签: python cookies


    【解决方案1】:

    不,Cookie 模块仅帮助您对 cookie 的抽象概念进行建模,并可能生成 Set-Cookie 标头。附加模块cookielib 可以处理cookie 集合,但两者都不会设置HTTP_COOKIE 环境标头。

    documentation 对此非常清楚:

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

    HTTP_COOKIE 环境变量是 CGI 服务器 将根据传入的 HTTP 请求设置的。您当然可以从 Cookie 对象生成这样的环境变量,但创建这样的对象的行为本身不会影响环境。

    如果您实际上是在 CGI 脚本中使用此函数,那么 cookie.output() 应该是 HTTP 标头的一部分;确保您尚未向 CGI 服务器发送双行分隔符信号,表明您的标头已完成。

    【讨论】:

    • 但是当我打印 cookie.output() 时,我的浏览器不会存储那个 cookie。
    • 下次我打开脚本时,我的浏览器应该将存储的 cookie 传递给 os.environ['HTTP_COOKIE']?
    • @user136638:除非您将该输出作为 HTTP 响应发送到浏览器,否则不会。
    • @user136638:如果浏览器收到了一个有效的cookie,那么浏览器会按照正常的cookie规则将它发送回源服务器,是的。
    • @user136638:但您的问题没有任何上下文表明您实际上是通过 CGI 脚本与浏览器进行交互。
    猜你喜欢
    • 2014-09-25
    • 2012-06-07
    • 2017-03-30
    • 2016-01-09
    • 1970-01-01
    • 2022-01-25
    • 2018-11-26
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多