Dans les applications Web modernes, le maintien de l'état de l'utilisateur sur plusieurs requêtes est essentiel pour créer des expériences personnalisées. Django simplifie cela grâce à son cadre de session intégré, permettant aux développeurs de gérer les données utilisateur de manière sécurisée et efficace.
Les sessions intégrées à Django sont chargées de gérer les données utilisateur sur plusieurs requêtes. Lorsque les utilisateurs se connectent à l'application Django, le serveur crée un identifiant de session, généralement stocké dans un cookie sur le navigateur du client. Cet ID de session sert de clé pour récupérer les données stockées sur le serveur et lier les requêtes à un utilisateur particulier. C'est pourquoi le statut d'authentification persistera sur différentes pages.
Le middleware de session de Django automatise la gestion des sessions. Il traite les demandes entrantes pour récupérer les données de session et prépare les réponses sortantes pour mettre à jour ou définir des cookies de session. Pour vérifier si le middleware de session est activé, regardez dans votre fichier settings.py sous la section MIDDLEWARE :
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # Other middleware ]
Nous disposons de plusieurs options pour enregistrer les données de session. Selon l'application que vous souhaitez créer, chacune présente des avantages et des inconvénients.
Analogie : Imaginez que le théâtre dispose d'une salle de stockage sécurisée avec des casiers où sont rangés tous les manteaux. Chaque casier se voit attribuer un numéro unique qui correspond au numéro figurant sur votre billet. Lorsque vous revenez avec votre ticket, le préposé recherche le numéro de casier dans un journal de bord et récupère votre manteau.
Les sessions sauvegardées sur une base de données enregistrent les données de session sur un serveur de base de données. Ainsi, les informations sensibles telles que les préférences de l'utilisateur, l'état de connexion et les détails du panier restent enregistrées en toute sécurité sur le backend. Ce type de séance peut être plus sûr mais entraîne certains désagréments lorsqu'il s'agit du processus d'écriture et de lecture. Les sessions sauvegardées sur une base de données sont plus lentes que les sessions sauvegardées sur le cache, donc si vous créez une application où le trafic est élevé, vous devriez y réfléchir à deux fois. Le stockage des sessions dans la base de données peut augmenter la charge sur la base de données, ce qui aura un impact sur les performances globales s'il n'est pas correctement géré.
Si vous souhaitez utiliser une session sauvegardée par une base de données, vous devez ajouter django.contrib.sessions à votre paramètre INSTALLED_APPS. Assurez-vous d'exécuter manage.py migrate pour installer la table de base de données unique qui stocke les données de session.
Analogie : Dans ce cas, chaque manteau est stocké dans un casier différent et étiqueté dans une grande pièce au fond de la salle. Chaque casier possède une étiquette ou un dossier unique avec les détails du manteau, et lorsque vous présentez votre billet, le préposé se rend au vestiaire, trouve l'étiquette correspondante et récupère votre manteau.
Les sessions basées sur des fichiers utilisent le système de fichiers du serveur pour enregistrer les données de session. Cela signifie que chaque session utilisateur est stockée dans un fichier distinct sur le serveur. Par défaut, Django stocke les fichiers de session dans le répertoire django_session sous /tmp (sur les systèmes Unix) ou dans un répertoire spécifié dans les paramètres de Django.
Pour activer les sessions basées sur des fichiers, définissez SESSION_ENGINE sur django.contrib.sessions.backends.file dans votre fichier settings.py.
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # Other middleware ]
Analogie : Ici, le théâtre utilise un porte-manteau temporaire près de l'entrée, où les manteaux ne sont conservés que peu de temps. Cela rend la récupération des manteaux très rapide, mais si le casier est plein, les manteaux les plus anciens peuvent être déplacés vers un stockage secondaire ou entièrement retirés.
Ce type de stockage de session est l'endroit où un système de mise en cache (tel que Memcached ou Redis) stocke les données de session. La sauvegarde des sessions en mémoire cache aidera les applications à fort trafic ou nécessitant des temps de réponse rapides car le processus d'écriture ou de lecture est très rapide.
Pour utiliser des sessions sauvegardées en cache, configurez le paramètre SESSION_ENGINE dans votre fichier settings.py. Vous devez également configurer le cache en fonction de la mémoire cache que vous utilisez.
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.file' # Use file-based session storage SESSION_FILE_PATH = '/path/to/session/files/' # Specify a directory for session files (optional)
Vous pouvez également utiliser django.contrib.sessions.backends.cached_db qui stocke les données de session à la fois dans le cache et dans la base de données, en revenant à la base de données si le cache n'est pas disponible.
Les meilleurs avantages de l'utilisation de ce type de session sont l'évolutivité et la rapidité. Les sessions sauvegardées en cache sont non seulement rapides car elles enregistrent les données en mémoire, mais réduisent également la charge sur la session de base de données. Les données peuvent être partagées entre les serveurs, ce qui rend possible la configuration multiserveur.
Analogie : Ici, au lieu de garder votre manteau en réserve, le théâtre vous permet de le transporter mais vous oblige à avoir un tampon spécial sur le billet qui vérifie qu'il s'agit bien de votre manteau. Vous apportez le manteau (données de séance) avec vous, et chaque fois que vous entrez dans la salle, le préposé vérifie le tampon sur le billet pour s'assurer qu'il n'a pas été falsifié.
Les sessions de cookies signées dans Django stockent les données de session directement sur le navigateur du client dans un cookie signé et crypté, plutôt que de les stocker côté serveur (base de données ou cache).
Pour activer les sessions de cookies signés, définissez SESSION_ENGINE dans le fichier settings.py de Django pour utiliser le backend des cookies signés :
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # Other middleware ]
Sessions de cookies signées, cela réduit la charge du serveur et libère les ressources du serveur. Mais, compte tenu de la taille limite des cookies (environ 4 Ko), les sessions de cookies signées ne conviennent pas au stockage de grandes quantités de données de session. Des tailles de cookies plus grandes peuvent entraîner des demandes plus lentes, car les données des cookies sont envoyées à chaque demande.
Django propose plusieurs paramètres pour configurer le comportement de la session :
SESSION_COOKIE_AGE : Définit le délai d'expiration de la session (en secondes).
SESSION_COOKIE_SECURE : nécessite que les sessions soient transmises via HTTPS.
SESSION_EXPIRE_AT_BROWSER_CLOSE : termine la session à la fermeture du navigateur.
SESSION_COOKIE_HTTPONLY : restreint l'accès JavaScript aux cookies de session, améliorant ainsi la sécurité.
Ces paramètres permettent d'adapter le comportement de la session aux besoins spécifiques de l'application. Pour en savoir plus sur la configuration de session, veuillez lire la documentation Django.
Pour interagir avec les sessions dans les vues Django, utilisez l'objet request.session, qui se comporte comme un dictionnaire. Voici quelques opérations de base :
Stockage des données :
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.file' # Use file-based session storage SESSION_FILE_PATH = '/path/to/session/files/' # Specify a directory for session files (optional)
Récupération des données :
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # For caching session storage SESSION_CACHE_ALIAS = 'default' # Specify the cache alias if needed (e.g., 'redis' or 'memcached') # Cache configuration (example with Redis) CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', # Redis URL 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } } }
Suppression de données :
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' SECRET_KEY = 'your-secret-key' # Make sure this key is kept secure and unique for your app
Une utilisation courante des sessions consiste à suivre l'état de connexion des utilisateurs. Voici comment mettre en œuvre un système de connexion simple à l'aide de sessions :
request.session['username'] = 'Harry Potter'
Il existe encore de nombreuses méthodes pour les sessions dans les vues Django. Pour une liste complète, veuillez consulter la documentation Django.
Django supprime périodiquement les sessions expirées. Vous pouvez personnaliser la fréquence en configurant le processus de nettoyage de session ou en exécutant des commandes de gestion telles que django-admin clearsessions.
Évitez de stocker de grandes quantités de données dans les sessions, car cela pourrait augmenter la charge du serveur et ralentir les temps de réponse. Enfin, activez les cookies sécurisés, les paramètres HttpOnly et HTTPS pour protéger les données de session.
Le framework de session de Django est puissant, flexible et sécurisé, ce qui facilite la mise en œuvre de la gestion de session dans vos applications Web. Avec une configuration appropriée et des pratiques sécurisées, vous pouvez tirer parti des sessions Django pour créer des expériences utilisateur efficaces et personnalisées tout en maintenant une sécurité robuste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!