====== Session ======
Doc:
* [[https://flask.palletsprojects.com/en/2.2.x/quickstart/#sessions]]
Didacticiels:
* [[https://www.code-learner.com/how-to-use-session-and-cookie-in-python-flask-framework/]]
* [[https://testdriven.io/blog/flask-sessions/]]
* [[https://pythonbasics.org/flask-sessions/]]
* [[https://overiq.com/flask-101/sessions-in-flask/]] :-)
===== 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** :
from flask import 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.
session["USERNAME"] = "Marc"
===== Lire une valeur dans la session =====
name = session.get("USERNAME")
# OU
name = session["USERNAME"]
Si la valeur n'existe pas dans la session, ça renvoie **None** :
if session.get("USERNAME") is not None:
success()
else:
error()
Tester l'existence d'une valeur avec l'opérateur **in** :
if "username" in session:
return session["username"]
Depuis un template, accéder au contenu de la session comme ceci :
{{ session.USERNAME }}
{{ session["USERNAME"] }}
===== Supprimer une valeur de la session =====
session.pop("USERNAME", None)
===== 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
@app.route("/login")
def login():
...
if password_is_ok(...):
...
session['username'] = username
session.permanent = True