5

存在很多与此类似的问题,但没有一个能帮助我。基本上我正在使用 WSGI start_response() 方法链接。我尝试使用元组 [('Set-Cookie', 'token=THE_TOKEN')] 在响应中设置一个虚拟标头,并将其添加到启动响应中,如下所示:

status   = '200 OK'
response = 'Success'
start_response(status,[('Set-Cookie', "DMR_TOKEN=DMR_TOKEN")])
return response

我不太确定它是否正常工作,但它在这里设置 cookies。现在,让我们假设标头是正确的,并且在以下请求中我想验证令牌。捕获过去设置的 cookie/标头的正确方法是什么?

我一直在阅读,发现我需要这样的东西:

(environ.get("HTTP_COOKIE",""))

但这一直在产生空字符串,所以我只是假设标头/cookie 设置不正确。

多谢你们

4

2 回答 2

8

我认为您需要明确设置路径以从 cookie 中获取有用的行为,请尝试以下操作:...

from Cookie import SimpleCookie

def my_app(environ, start_response):
    session_cookie = SimpleCookie()
    session_cookie['session'] = "somedata"
    session_cookie['session']["Path"] = '/'

    headers = []
    headers.extend(("set-cookie", morsel.OutputString())
                    for morsel
                    in session_cookie.values())

    start_response("200 OK", headers)
于 2013-01-01T02:03:23.113 回答
3

这是我想出的一个简单的解决方案,用于在 WSGI 中设置不需要外部库的 cookie:

def set_cookie_header(name, value, days=365):
    dt = datetime.datetime.now() + datetime.timedelta(days=days)
    fdt = dt.strftime('%a, %d %b %Y %H:%M:%S GMT')
    secs = days * 86400
    return ('Set-Cookie', '{}={}; Expires={}; Max-Age={}; Path=/'.format(name, value, fdt, secs))

def handler(env, start_response):
    content_type = 'text/html'
    headers = [('Content-Type', content_type), set_cookie_header('name', 'value')]
    start_response('200 OK', headers)
    ...
于 2020-01-31T21:46:35.143 回答