[spip-dev] Documentation sur les temps de connexion

J'ai l'impression que la doc sur combien de temps on peut être connecté et comment ça se modifie est incomplète mais aussi confusionante. Et moi-même je ne sais du coup jamais ce que ça fait :stuck_out_tongue:

Quand je lis :
https://www.spip.net/fr_article5716.html
ça parle d'un temps de *session* de 12h, et qu'on peut le modifier.

Mais la case dans le formulaire de connexion dit *quelques jours*. On est d'accord que 12h c'est pas quelques jours ? :slight_smile:
Donc les "quelques jours", c'est la validité d'un cookie, pas la session ? Mais c'est quoi le temps de session alors ? Par rapport à mon navigateur, quand je me barre, que je l'éteins, ça correspond à quoi ?

Et ces validités de cookies, ils sont automatiquement calculés suivant cette session (là ça parle de 4 × la variable) ? ou bien on peut les personnaliser séparément ?

Cas concret : j'ai un site avec des abonné⋅es, comptes uniquement visiteurs publics donc, et ça se déconnecte toujours trop vite. Pourquoi ? Que doit-on changer pour ça ? Plusieurs choses ? Une seule chose ?

Bonus : peut-on imaginer une méthode pas trop compliquée pour définir un temps différent suivant les machines ? Du genre plus long sur un navigateur mobile que sur un ordi bureau (on partage pas trop son mobile) ?

Je mettrai à jour l'article (ou les) suivant les réponses :slight_smile:

Dans le même cas, j'ai modifié une seule chose :
define('_RENOUVELLE_ALEA', 400 * 3600); // soit env 2 semaines

Et ça marche bien

JL

Ok mais la question là n'est pas juste quoi faire mystérieusement, mais de comprendre, la doc quoi. :slight_smile:

C'est un mystère et ça reste flou pour tout le monde sauf 2 ou 3 personnes ?

Quelqu'un⋅e qui y a compris quelque chose peut-ille expliquer le détail ?

Toujours personne qui est capable de comprendre le vrai cheminement de comment ça marche en détail, pour compléter une vraie documentation ?

As tu vu les éléments de doc dans le super-hypra wiki de contrib : Durée des cookies dans SPIP
Ce serait à compléter donc s’il manque des choses,
avec les éléments complémentaires dont tu as déjà la compréhension
Et puis ensuite, préciser tes interrogations ?

Toutes mes interrogations sont dans le premier post non ?

  • La doc mélange les concepts de « durée de l’alea », « durée des cookies » et « durée des sessions », sans qu’on sache le rapport entre l’un et l’autre, et sans qu’on sache de quels cookies et pourquoi précisément.
  • L’interface utilisateur parle de « quelques jours », alors que dans le code on parle de « 12h » par défaut. Donc c’est quoi le rapport et pourquoi ?
  • Et donc surtout le « temps de session » c’est quoi concrètement ? Si j’éteins mon navigateur (en mode normal pas privé) et que je reviens sur le site, c’est quoi, « la session » ? Je suis toujours connecté ou pas et pourquoi et combien de temps ?
  • La durée des cookies (en fait il faut préciser pour chacun car chaque cookie peut avoir une durée différente) est calculé par rapport à la durée de session, ou l’inverse ?
    Etc

Il s’agit d’une session PHP, qui dure le temps de la navigation. Elle est donc perdue quand on ferme le navigateur. Les cookies, stockées sur le navigateur survivent à sa fermeture et permettent de restaurer la session PHP.

Quand on se connecte à SPIP :

  • Création d’une session PHP : 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 les mêmes infos que celles présentes dans la session PHP
  • 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. 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.

En fermant le navigateur, la session PHP est donc perdue. En le ré-ouvrant et en se rendant de nouveau sur le site SPIP sur lequel vous étiez connecté lors d’une précédente « session » de navigation, le cookie est transmis au serveur : à SPIP, qui s’en sert pour retrouver le fichier dans tmp/session et initialiser une session PHP à partir de là. Vous êtes donc de nouveau connecté.

Le cookie permet de maintenir la connexion au delà de la fermeture du client. Mais il a une durée limité 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.

1 « J'aime »

Merci. Je l’ai reporté sur Durée des cookies dans SPIP

Merci. Je pense avoir dit une bêtise :

Écriture du fichier dans tmp/session contenant les mêmes infos que celles présentes dans la session PHP

En fait, SPIP gère ses propres sessions en créant les fichiers dans tmp/session mais il n’y a pas de session PHP au sens session_start. Sauf pour les « sessions anonymes » mais je n’ai pas encore compris ce que c’était.

Ceci dit, session_start ou pas, on peut bien parler de session.

J’ai complété le wiki et également corrigé en ne parlant plus de « session php », et avec : «

  • Création des données de session…
  • Écriture du fichier dans tmp/session contenant ces infos… »

Mais j’ai l’impression que ce que tu décris à la fermeture du navigateur et à sa réouverture se passe en fait à chaque hit : « le cookie est transmis au serveur (à SPIP), qui s’en sert pour retrouver le fichier dans tmp/session et initialiser une session ». N’est il pas ?

Oui exact. Les cookies sont transmis à chaque hit, et persistent au delà de la fermeture du navigateur.

SPIP gère son propre cookie et sa propre session dans tmp/sessions. Je suppose que c’est historique. J’aimerai bien connaitre les avantages à avoir géré cela comme ça plutôt que d’utiliser le système natif de session php.

Et aussi comprendre dans quel cas une session anonyme est créée (avec le système de session php natif cette fois). En fait, pourquoi distinguer 2 cas de figures ? Qui sont ces « anonymes » ? Un rapport avec le statut « visiteur » ?

Les visiteurs dont spip sait qu’ils sont « visiteurs » ne sont pas « anonymes » puisqu’ils sont nécessairement identifiés = logés. « anonyme » c’est la session commune à toutes les visites dont l’internaute n’est pas identifié-logé.

Pour la raison historique du choix de sessions SPIP plutôt que PHP, tu pourrais chercher les inconvénients des sessions PHP, notamment avec PHP3, ou sur des serveurs ayant un grand nombre de connectés simultanés.

Mais donc (again) ce tu décris comme se passant à la fermeture puis réouverture du navigateur sur le même site, se passe en fait à chaque hit de navigation sur le site, même sans fermer et réouvrir le navigateur.