簡體   English   中英

如何在 Python Flask 中設置 cookie?

[英]How to set cookie in Python Flask?

這樣,我想設置我的cookie。 但是設置失敗。

@app.route('/')
def index():
    res = flask.make_response()
    res.set_cookie("name", value="I am cookie")

當我打印res它顯示<Response 0 bytes [200 OK] But not set cookie

您已在設置 cookie 后返回響應。

@app.route('/')
def index():
    resp = make_response(render_template(...))
    resp.set_cookie('somecookiename', 'I am cookie')
    return resp 

這樣 cookie 將在您的瀏覽器中生成,但您可以在下一個請求中獲取此 cookie。

@app.route('/get-cookie/')
def get_cookie():
    username = request.cookies.get('somecookiename')

如果您使用其他工具查看它(例如:在 Firefox 或 Chrome 中為開發人員工具按 F12)或在呈現的響應中使用一段 JavaScript 代碼,則您設置的 cookie 將可見。

cookie瀏覽器本身 (JavaScript) 或作為來自服務器的響應設置在瀏覽器上。

差異非常重要,因為即使 cookie 是由服務器設置的,也可能不會在瀏覽器上設置 cookie(例如:cookie 被完全禁用或丟棄的情況)。

因此,即使服務器可能會告訴“我設置了 cookie” - 瀏覽器上也可能不存在 cookie。

為了讓服務器確保設置了 cookie,需要來自瀏覽器的后續請求(cookie 存在於請求的標頭中)。

因此,即使 Flask 的響應( res變量)會提到 cookie 已設置,我們也只能確定它是由服務器設置的,但瀏覽器不會對此進行確認。

高級另一個方面是關於 Flask 或任何其他 API 如何創建響應。 由於有效載荷(html/模板代碼)和標頭(cookie)是同時設置的 - 有效載荷(html/模板代碼)中的“代碼”可能無法訪問 cookie。 因此,您可能無法設置 cookie 並將其顯示在響應中。

一個想法可能是(能夠)首先設置 cookie,然后渲染上下文和設置順序很重要 - 以便 html/模板知道已經設置的值。 但即使在這種情況下也只是服務器確認它設置了 cookie。

一個解決方案

@app.route('/')
def index():
    res = flask.make_response()
    res.set_cookie("name", value="I am cookie")

    # redirect to a page that display the cookie
    resp.headers['location'] = url_for('showcookies') 

    return resp, 302

此響應將在您的瀏覽器中設置 cookie

def func():
    response = make_response( render_template() )
    response.set_cookie( "name", "value" )
    return response

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM