web-dev-qa-db-fra.com

Flacon: Comment supprimer les cookies?

J'ai placé des cookies avec le code suggéré dans les documents:

from flask import make_response

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

Mais comment les supprimer? Il n'y a pas de méthode remove_cookie. J'ai essayé:

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

mais il s'avère que l'objet request.cookies est immuable. Que fais-je?

30
Oliver

Il n'y a pas d'en-tête HTTP pour supprimer un cookie. Traditionnellement, vous définissez simplement le cookie sur une valeur fictive avec une date d'expiration dans le passé, il expire donc immédiatement.

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

Cela définira le cookie d'ID de session sur une chaîne vide qui expire à unixtime 0, ce qui est presque certainement du passé.

45
Eevee

Vous devez définir le cookie avec une expiration antérieure.

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

Au fait, j'espère que vous ne vous attendez pas à ce que le cookie de nom d'utilisateur soit sûr. Parce que non. L'utilisateur peut y mettre tout ce qu'il veut. La solution consiste généralement à utiliser la session Flask qui utilise un cookie signé qui ne peut pas être modifié par l'utilisateur.

8
ThiefMaster

Nous pouvons nous rendre de delete_cookie () disponible à partir de flask.Response.

resp.delete_cookie('username')

Cela supprimera le cookie lors de la réponse. Voici documentation delete_cookie .

Vous pouvez également vouloir ajouter chemin d'accès (valeur par défaut à '/') et domaine (défini par défaut sur Aucun).

resp.delete_cookie('username', path='/', domain='yourdomain.com')

Voici la capture d'écran de l'interpréteur qui montre l'objet delete_cookie dans flask.Response.

Python Interpreter Screenshot

4
Reck