from bottle import request, response, route, run from typing import Tuple, Union SESSIONS = {} def get_session() -> Union[dict, None]: """ Renvoie la session associée à l'identifiant de session dans le cookie, ou None si la session n'existe pas. """ # on récupère l'identifiant de session dans le cookie session_id = request.get_cookie("session_id") if session_id in SESSIONS: return SESSIONS[session_id] return None def create_session_id() -> str: """ Renvoie un identifiant de session aléatoire. """ # on génère une chaîne aléatoire pour l'identifiant de session import random import string return ''.join(random.choices(string.ascii_letters + string.digits, k=16)) def create_session() -> Tuple[str, dict]: """ Renvoie un identifiant de session et un dictionnaire vide pour la session. """ # on génère un nouvel identifiant de session session_id = create_session_id() SESSIONS[session_id] = {} return session_id, SESSIONS[session_id] @route("/compteur") def compteur(): # on récupère la session session = get_session() if session is None: # si la session n'existe pas, on en crée une nouvelle session_id, session = create_session() response.set_cookie("session_id", session_id, path="/", httponly=True) # on incrémente le compteur session["compteur"] += 1 return f"Compteur : {session['compteur']}" if __name__ == "__main__": run(host='localhost', port=38083, debug=True, reloader=True)