Mémo des cookies déposés par SPIP et de leur durée par défaut
Les cookies sont gérés par la fonction spip_setcookie
Constante PHP
La constante _RENOUVELLE_ALEA définit la durée de validité de l’aléa qui sert pour l’authentification des cookies, en secondes. Elle permet notamment de modifier la durée des sessions. La valeur par défaut est de 12 heures. (Doc sur spip.net _RENOUVELLE_ALEA)
Cookie visiteurs
| Nom du cookie | Fonction | Durée | Appel |
|---|---|---|---|
| spip_lang | mémoriser la langue du visiteur | 1 an | ecrire/action/converser.php |
| spip_accepte_ajax | mémoriser si le visiteur supporte l’ajax | la session | ecrire/inc/cookie.php |
Cookie rédacteurs / admin
Valable jusqu’à SPIP 3.1
| Nom du cookie | Fonction | Durée | Appel |
|---|---|---|---|
| spip_lang_ecrire | mémoriser la langue du visiteur dans le backoffice | 1 an | ecrire/action/converser.php |
| spip_ecran | mémoriser réglages écran et couleur du visiteur dans le backoffice | 1 an | ecrire/action/preferer.php |
| spip_admin | “cookie de correspondance” mémoriser l’accès aux backoffice bouton dans la partie publique |
1 semaine (admin) 14 jours (rédacteur) |
ecrire/inc/auth.php ecrire/action/cookie.php |
| spip_session | mémoriser si une session est active | * | ecrire/inc/session.php |
La durée de la session est égale à la constante _RENOUVELLE_ALEA (valeur par défaut 12 heures) * ...
A partir de SPIP 3.2
Suppression du cookie de correspondance par un simple cookie d’administration
Session et cookies
- Selon Julien L :
- Modifié et proposé sur programmer.spip.net
Une session dure le temps de la navigation. Elle est donc perdue quand on ferme le navigateur. Les cookies, stockés sur le navigateur survivent à sa fermeture et permettent de restaurer la session PHP.
SPIP ne crée pas de “session PHP” telles que créées par session_start() [doc php], mais gère ses propres sessions en créant les fichiers dans tmp/session.
Quand on se connecte à SPIP :
- Création des données de session : un tableau contenant les infos de l’utilisateur que SPIP à fréquemment besoin de lire (cela lui évite des accès SQL fréquents par exemple).
- Écriture du fichier dans tmp/session contenant ces infos
- Pose d’un cookie sur le navigateur qui contient le nom du fichier dans tmp/session
Les cookies sont transmis à chaque hit, c’est pourquoi ils doivent rester léger, et c’est sans doute une des raisons de l’existence du fichier côté serveur dans tmp/session, car ainsi, le cookie ne contient globalement que le nom du fichier. Ça permet aussi d’éviter de faire transiter des infos personnelles entre client/serveur.
À chaque hit, et aussi lorsque le navigateur est fermé puis réouvert en se rendant de nouveau sur le site SPIP sur lequel vous étiez connecté lors d’une précédente navigation, le cookie est transmis au serveur à SPIP, qui s’en sert pour retrouver le fichier dans tmp/session et initialiser une session à partir de là. Vous êtes donc de nouveau connecté.
Le cookie permet donc de maintenir la connexion au delà de la fermeture du client. Mais il a une durée limitée décrit dans ecrire\inc\session.php. La fonction definir_duree_cookie_session précise :
- Durée par défaut : 2 x _RENOUVELLE_ALEA
- Durée de 20 x _RENOUVELLE_ALEA si l’utilisateur a coché la case « Rester connecté qq jours »
Au delà de cette durée, le cookie est expiré. Le serveur n’y a plus accès. Vous vous retrouvez dans la situation d’un anonyme.