Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
python:flask:session [2020/12/05 07:13] marclebrun |
python:flask:session [2023/05/12 13:50] (Version actuelle) marclebrun |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Session ====== | ====== Session ====== | ||
- | **Prérequis** : avoir défini une clé dans la valeur **SECRET_KEY**. | + | Doc: |
+ | * [[https://flask.palletsprojects.com/en/2.2.x/quickstart/#sessions]] | ||
- | <code python> | + | Didacticiels: |
- | app.config["SECRET_KEY"] = "... clé secrète ..." | + | * [[https://www.code-learner.com/how-to-use-session-and-cookie-in-python-flask-framework/]] |
- | </code> | + | * [[https://testdriven.io/blog/flask-sessions/]] |
+ | * [[https://pythonbasics.org/flask-sessions/]] | ||
+ | * [[https://overiq.com/flask-101/sessions-in-flask/]] :-) | ||
- | Import : | + | ===== Prérequis ===== |
+ | |||
+ | Avoir défini une clé dans la valeur **SECRET_KEY** (voir la | ||
+ | page [[python:flask:configuration]]) | ||
+ | |||
+ | La valeur de la **SECRET_KEY** se retrouve dans le tableau **app.config** ou | ||
+ | directement dans **app.secret_key**. | ||
+ | |||
+ | Importer l'objet **session** : | ||
<code python> | <code python> | ||
Ligne 13: | Ligne 24: | ||
</code> | </code> | ||
- | Stocker une valeur dans la session : | + | ===== Stocker une valeur dans la session ===== |
+ | |||
+ | Dès qu'on écrit quelque chose dans la session, un cookie est enregistré dans le | ||
+ | navigateur. Le nom du cookie est "**session**". | ||
+ | Ce cookie est illisible si on ne possède pas la **SECRET_KEY** de | ||
+ | l'application. | ||
<code python> | <code python> | ||
Ligne 19: | Ligne 35: | ||
</code> | </code> | ||
- | Lire une valeur dans la session : | + | ===== Lire une valeur dans la session ===== |
<code python> | <code python> | ||
name = session.get("USERNAME") | name = session.get("USERNAME") | ||
+ | |||
+ | # OU | ||
+ | |||
+ | name = session["USERNAME"] | ||
</code> | </code> | ||
Ligne 34: | Ligne 54: | ||
</code> | </code> | ||
+ | Tester l'existence d'une valeur avec l'opérateur **in** : | ||
+ | |||
+ | <code python> | ||
+ | if "username" in session: | ||
+ | return session["username"] | ||
+ | </code> | ||
+ | |||
+ | Depuis un template, accéder au contenu de la session comme ceci : | ||
+ | |||
+ | <code twig> | ||
+ | {{ session.USERNAME }} | ||
+ | {{ session["USERNAME"] }} | ||
+ | </code> | ||
+ | |||
+ | ===== Supprimer une valeur de la session ===== | ||
+ | |||
+ | <code python> | ||
+ | session.pop("USERNAME", None) | ||
+ | </code> | ||
+ | |||
+ | ===== Durée de validité de la session ===== | ||
+ | |||
+ | Par défaut le cookie de session expire à la fermeture du navigateur. | ||
+ | |||
+ | Pour que la session reste ouverte pendant 31 jours (la valeur par défaut) : | ||
+ | * La valeur de **app.config["PERMANENT_SESSION_LIFETIME"]** est déjà initialisée à **31 jours** par défaut | ||
+ | * Mettre **session.permanent = True** lors d'une connexion réussie | ||
+ | |||
+ | <code python> | ||
+ | @app.route("/login") | ||
+ | def login(): | ||
+ | | ||
+ | ... | ||
+ | | ||
+ | if password_is_ok(...): | ||
+ | ... | ||
+ | session['username'] = username | ||
+ | session.permanent = True | ||
+ | </code> | ||