| <?xml version="1.0"?> |
| <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> |
| <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?> |
| <!-- English Revision : 1500428 --> |
| <!-- French translation : Lucien GENTIS --> |
| <!-- Reviewed by : Vincent Deffontaines --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <modulesynopsis metafile="mod_session_dbd.xml.meta"> |
| |
| <name>mod_session_dbd</name> |
| <description>Support des session basé sur DBD/SQL</description> |
| <status>Extension</status> |
| <sourcefile>mod_session_dbd.c</sourcefile> |
| <identifier>session_dbd_module</identifier> |
| <compatibility>Disponible depuis la version 2.3 d'Apache</compatibility> |
| |
| <summary> |
| <note type="warning"><title>Avertissement</title> |
| <p>Les modules de session font usage des cookies HTTP, et peuvent |
| à ce titre être victimes d'attaques de type Cross Site Scripting, |
| ou divulguer des informations à caractère privé aux clients. |
| Veuillez vous assurer que les risques ainsi encourus ont été pris |
| en compte avant d'activer le support des sessions sur votre |
| serveur.</p> |
| </note> |
| |
| <p>Ce sous-module du module <module>mod_session</module> fournit le |
| support du stockage des sessions utilisateur dans une base de |
| données SQL en utilisant le module <module>mod_dbd</module>.</p> |
| |
| <p>Les sessions sont soit <strong>anonymes</strong>, et la session |
| est alors identifiée par un UUID unique stocké dans un cookie au |
| niveau du navigateur, soit <strong>propres à l'utilisateur</strong>, |
| et la session est alors identifiée par l'identifiant de |
| l'utilisateur connecté.</p> |
| |
| <p>Les sessions basées sur SQL sont dissimulées au navigateur, et |
| permettent ainsi de préserver la confidentialité sans avoir recours |
| au chiffrement.</p> |
| |
| <p>Plusieurs serveurs web d'une forêt de serveurs peuvent choisir de |
| partager une base de données, et ainsi partager les sessions entre |
| eux.</p> |
| |
| <p>Pour plus de détails à propos de l'interface des sessions, voir |
| la documentation du module <module>mod_session</module>.</p> |
| |
| </summary> |
| <seealso><module>mod_session</module></seealso> |
| <seealso><module>mod_session_crypto</module></seealso> |
| <seealso><module>mod_session_cookie</module></seealso> |
| <seealso><module>mod_dbd</module></seealso> |
| |
| <section id="dbdconfig"><title>Configuration de DBD</title> |
| |
| <p>Pour que le module <module>mod_session_dbd</module> puisse être |
| configuré et maintenir une session, il faut tout d'abord |
| configurer le module <module>mod_dbd</module> pour que le serveur |
| puisse exécuter des requêtes vers la base de données.</p> |
| |
| <p>Quatre types de requêtes sont nécessaires pour maintenir une |
| session, sélectionner ou mettre à jour une session existante, |
| insérer une nouvelle session et supprimer une session vide ou |
| arrivée à expiration. Ces requêtes sont configurées comme dans |
| l'exemple suivant :</p> |
| |
| <example><title>Exemple de configuration de DBD</title> |
| <highlight language="config"> |
| DBDriver pgsql |
| DBDParams "dbname=apachesession user=apache password=xxxxx host=localhost" |
| DBDPrepareSQL "delete from session where key = %s" deletesession |
| DBDPrepareSQL "update session set value = %s, expiry = %lld, key = %s where key = %s" updatesession |
| DBDPrepareSQL "insert into session (value, expiry, key) values (%s, %lld, %s)" insertsession |
| DBDPrepareSQL "select value from session where key = %s and (expiry = 0 or expiry > %lld)" selectsession |
| DBDPrepareSQL "delete from session where expiry != 0 and expiry < %lld" cleansession |
| </highlight> |
| </example> |
| |
| </section> |
| |
| <section id="anonymous"><title>Sessions anonymes</title> |
| |
| <p>Les sessions anonymes sont identifiées par un UUID unique, et |
| stockées dans un cookie au niveau du navigateur. Cette méthode est |
| similaire à celle utilisée par la plupart des serveurs |
| d'applications pour stocker les informations de session.</p> |
| |
| <p>Pour créer une session anonyme, la stocker dans une table de |
| base de donnée postgres nommée <var>apachesession</var>, et |
| sauvegarder l'identifiant de session dans un cookie nommé |
| <var>session</var>, configurez la session comme suit :</p> |
| |
| <example><title>Session anonyme basée sur SQL</title> |
| <highlight language="config"> |
| Session On |
| SessionDBDCookieName session path=/ |
| </highlight> |
| </example> |
| |
| <p>Pour plus d'exemples sur la manière dont une application CGI |
| peut accéder aux informations de session, voir la section exemples |
| de la documentation du module <module>mod_session</module>.</p> |
| |
| <p>Pour des détails sur la manière dont une session peut être |
| utilisée pour stocker des informations de type nom |
| d'utilisateur/mot de passe, voir la documentation du module |
| <module>mod_auth_form</module>.</p> |
| |
| </section> |
| |
| <section id="peruser"><title>Sessions propres à un |
| utilisateur</title> |
| |
| <p>Les sessions propres à un utilisateur sont identifiées par le |
| nom de l'utilisateur authentifié avec succès. Ceci permet |
| d'assurer une confidentialité optimale, car aucun traitement |
| externe à la session n'existe en dehors du contexte |
| authentifié.</p> |
| |
| <p>Les sessions propres à un utilisateur ne fonctionnent que dans |
| un environnement d'authentification correctement configuré, qu'il |
| s'agisse d'une authentification de base, à base de condensés |
| (digest) ou de certificats client SSL. Suite à des limitations |
| dues à des dépendances mutuelles, les sessions propres à un |
| utilisateur ne peuvent pas être utilisées pour stocker les données |
| d'authentification en provenance d'un module comme |
| <module>mod_auth_form</module>.</p> |
| |
| <p>Pour créer une session propre à un utilisateur, la stocker dans |
| une table de base de données postgres nommée |
| <var>apachesession</var>, avec comme clé de session l'identifiant |
| utilisateur, ajoutez les lignes suivantes :</p> |
| |
| <example><title>Session propre à un utilisateur basée sur SQL</title> |
| <highlight language="config"> |
| Session On |
| SessionDBDPerUser On |
| </highlight> |
| </example> |
| |
| </section> |
| |
| <section id="housekeeping"><title>Nettoyage de la base de |
| données</title> |
| <p>Avec le temps, la base de données va commencer à accumuler des |
| sessions expirées. Pour le moment, le module |
| <module>mod_session_dbd</module> n'est pas en mesure de gérer |
| automatiquement l'expiration des sessions.</p> |
| |
| <note type="warning"><title>Avertissement</title> |
| <p>L'administrateur devra mettre en oeuvre un traitement externe |
| via cron pour nettoyer les sessions expirées.</p> |
| </note> |
| |
| </section> |
| |
| <directivesynopsis> |
| <name>SessionDBDCookieName</name> |
| <description>Nom et attributs du cookie RFC2109 qui contient |
| l'identifiant de session</description> |
| <syntax>SessionDBDCookieName <var>nom</var> <var>attributs</var></syntax> |
| <default>none</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDCookieName</directive> permet |
| de spécifier le nom et les attributs optionnels d'un cookie |
| compatible RFC2109 qui contiendra l'identifiant de session. Les |
| cookies RFC2109 sont définis à l'aide de l'en-tête HTTP |
| <code>Set-Cookie</code>. |
| </p> |
| |
| <p>Une liste optionnelle d'attributs peut être spécifiée pour ce |
| cookie, comme dans l'exemple ci-dessous. Ces attributs sont insérés |
| dans le cookie tels quels, et ne sont pas interprétés par Apache. |
| Assurez-vous que vos attributs sont définis correctement selon la |
| spécification des cookies. |
| </p> |
| |
| <example><title>Cookie avec attributs</title> |
| <highlight language="config"> |
| Session On |
| SessionDBDCookieName session path=/private;domain=example.com;httponly;secure;version=1; |
| </highlight> |
| </example> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDCookieName2</name> |
| <description>Nom et attributs du cookie RFC2965 qui contient |
| l'identifiant de session</description> |
| <syntax>SessionDBDCookieName2 <var>nom</var> <var>attributs</var></syntax> |
| <default>none</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDCookieName2</directive> permet |
| de spécifier le nom et les attributs optionnels d'un cookie |
| compatible RFC2965 qui contiendra l'identifiant de session. Les |
| cookies RFC2965 sont définis à l'aide de l'en-tête HTTP |
| <code>Set-Cookie2</code>. |
| </p> |
| |
| <p>Une liste optionnelle d'attributs peut être spécifiée pour ce |
| cookie, comme dans l'exemple ci-dessous. Ces attributs sont insérés |
| dans le cookie tel quel, et ne sont pas interprétés par Apache. |
| Assurez-vous que vos attributs sont définis correctement selon la |
| spécification des cookies. |
| </p> |
| |
| <example><title>Cookie2 avec attributs</title> |
| <highlight language="config"> |
| Session On |
| SessionDBDCookieName2 session path=/private;domain=example.com;httponly;secure;version=1; |
| </highlight> |
| </example> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDCookieRemove</name> |
| <description>Détermine si les cookies de session doivent être supprimés |
| des en-têtes HTTP entrants</description> |
| <syntax>SessionDBDCookieRemove On|Off</syntax> |
| <default>SessionDBDCookieRemove On</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDCookieRemove</directive> permet |
| de déterminer si les cookies contenant l'identifiant de session |
| doivent être supprimés des en-têtes pendant le traitement de la |
| requête.</p> |
| |
| <p>Dans le cas d'un mandataire inverse où le serveur Apache sert de |
| frontal à un serveur d'arrière-plan, révéler le contenu du cookie de |
| session à ce dernier peut conduire à une violation de la |
| confidentialité. À ce titre, si cette directive est définie à "on", |
| le cookie de session sera supprimé des en-têtes HTTP entrants.</p> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDPerUser</name> |
| <description>Active une session propre à un utilisateur</description> |
| <syntax>SessionDBDPerUser On|Off</syntax> |
| <default>SessionDBDPerUser Off</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDPerUser</directive> permet |
| d'activer une session propre à un utilisateur, dont la clé sera le |
| nom de l'utilisateur connecté. Si l'utilisateur n'est pas connecté, |
| la directive sera ignorée.</p> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDSelectLabel</name> |
| <description>La requête SQL à utiliser pour sélectionner des sessions |
| dans la base de données</description> |
| <syntax>SessionDBDSelectLabel <var>étiquette</var></syntax> |
| <default>SessionDBDSelectLabel selectsession</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDSelectLabel</directive> permet |
| de définir l'étiquette de la requête de sélection par défaut à |
| utiliser pour charger une session. Cette étiquette doit avoir été |
| définie au préalable via une directive <directive |
| module="mod_dbd">DBDPrepareSQL</directive>.</p> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDInsertLabel</name> |
| <description>La requête SQL à utiliser pour insérer des sessions dans la |
| base de données</description> |
| <syntax>SessionDBDInsertLabel <var>étiquette</var></syntax> |
| <default>SessionDBDInsertLabel insertsession</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDInsertLabel</directive> permet |
| de définir l'étiquette de la requête d'insertion par défaut à |
| charger dans une session. Cette |
| étiquette doit avoir été définie au préalable via une directive |
| <directive module="mod_dbd">DBDPrepareSQL</directive>.</p> |
| |
| <p>Si une tentative de mise à jour d'une session ne concerne aucun |
| enregistrement, c'est cette requête qui sera utilisée pour insérer |
| la session dans la base de données.</p> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDUpdateLabel</name> |
| <description>La requête SQL à utiliser pour mettre à jour des sessions |
| préexistantes dans la base de données</description> |
| <syntax>SessionDBDUpdateLabel <var>étiquette</var></syntax> |
| <default>SessionDBDUpdateLabel updatesession</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDUpdateLabel</directive> permet |
| de définir l'étiquette de la requête de mise à jour par défaut à |
| charger dans une session. Cette |
| étiquette doit avoir été définie au préalable via une directive |
| <directive module="mod_dbd">DBDPrepareSQL</directive>.</p> |
| |
| <p>Si une tentative de mise à jour d'une session ne concerne aucun |
| enregistrement, c'est la requête d'insertion qui sera appelée pour |
| insérer la session dans la base de données. Si la base de données |
| supporte InsertOrUpdate, modifiez cette requête pour effectuer la |
| mise à jour en une seule requête au lieu de deux.</p> |
| |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>SessionDBDDeleteLabel</name> |
| <description>La requête SQL à utiliser pour supprimer des sessions de la |
| base de données</description> |
| <syntax>SessionDBDDeleteLabel <var>étiquette</var></syntax> |
| <default>SessionDBDDeleteLabel deletesession</default> |
| <contextlist><context>server config</context> |
| <context>virtual host</context> |
| <context>directory</context> |
| <context>.htaccess</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>SessionDBDDeleteLabel</directive> permet |
| de définir l'étiquette de la requête de suppression à utiliser par |
| défaut pour supprimer une session vide ou expirée. Cette |
| étiquette doit avoir été définie au préalable via une directive |
| <directive module="mod_dbd">DBDPrepareSQL</directive>.</p> |
| |
| </usage> |
| </directivesynopsis> |
| |
| </modulesynopsis> |