[英]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.