2013-01-17 80 views
16

我把餅乾在文檔中建議的代碼:燒瓶:如何清除cookie?

from flask import make_response 

@app.route('/') 
def index(): 
    resp = make_response(render_template(...)) 
    resp.set_cookie('username', 'the username') 
    return resp 

但是我怎麼刪除?沒有remove_cookie方法。我試過:

if request.cookies.get('sessionID'); 
    request.cookies.pop('sessionID', None) 

但事實證明request.cookies對象是不可變的。我該怎麼辦?

回答

30

沒有用於刪除cookie的HTTP標頭。傳統上,您只需將cookie設置爲過期的過期日期的虛擬值,並立即過期。

resp.set_cookie('sessionID', '', expires=0) 

這將在會話cookie設置爲在unixtime 0,這幾乎肯定是在過去的到期空字符串。

+0

ThiefMaster的回答給出了這個必要嗎? – Oliver

+0

一個cookie可以存在並且仍然是空的。使用'expires'會實際刪除它。但差異很小,是的。 – Eevee

+0

在這種情況下,我想你的答案更準確。 – Oliver

6

您需要將cookie設置爲過期的過期時間。

resp = make_response(render_template(...)) 
resp.set_cookie('username', expires=0) 
return resp 

順便說一下,我希望你不會真正期望用戶名cookie是安全的。因爲它不是。用戶可以把他想要的東西放在那裏。解決方案通常使用Flask會話,該會話使用用戶無法修改的簽名cookie。

+0

嗯,好吧。我知道他們並不安全,但我還沒有弄清楚如何閱讀帶有不同服務的簽名cookie(我有Flask與node.js應用程序交談) – Oliver