[gestion sessions] : suppression de session inutilisée #3807

Closed
opened 7 years ago by g0uZ · 10 comments
g0uZ commented 7 years ago

Lors de l'authentification d'un utilisateur un nouveau fichier de session est créé et tous les fichiers des sessions existants sont mis à jour à cause du changement des champs "maj" et "date_session". Effet de bort : si un utilisateur s'authentifie en boucle sans jamais se délogger le répertoire tmp/sessions/ se rempli sans jamais être vidé.

Le problème se situe ici :

https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L472

L'idée proposé pour résoudre ce problème consiste à comparer plus finement les sessions avant de les mettre à jour :

ajout de la fonction :

/**
 * Comparer deux sessions
 *  
 */
function comparer_sessions($a, $b) {
	if ($a == $b) {
		return true;
	}
	unset($a['maj'], $a['date_session']);
	unset($b['maj'], $b['date_session']);
	return $a == $b;
}

et de modifier https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L472 pour l'utiliser :

if ( ! comparer_sessions($auteur_session, $GLOBALS['visiteur_session']) ) {
Lors de l'authentification d'un utilisateur un nouveau fichier de session est créé et tous les fichiers des sessions existants sont mis à jour à cause du changement des champs "maj" et "date_session". Effet de bort : si un utilisateur s'authentifie en boucle sans jamais se délogger le répertoire tmp/sessions/ se rempli sans jamais être vidé. Le problème se situe ici : https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L472 L'idée proposé pour résoudre ce problème consiste à comparer plus finement les sessions avant de les mettre à jour : ajout de la fonction : <pre> /** * Comparer deux sessions * */ function comparer_sessions($a, $b) { if ($a == $b) { return true; } unset($a['maj'], $a['date_session']); unset($b['maj'], $b['date_session']); return $a == $b; } </pre> et de modifier https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L472 pour l'utiliser : <pre> if ( ! comparer_sessions($auteur_session, $GLOBALS['visiteur_session']) ) { </pre>
Poster

Il faut aussi décommenter https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L216 pour que les vieilles sessions soit bien supprimées.

Il faut aussi décommenter https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L216 pour que les vieilles sessions soit bien supprimées.
b_b commented 6 years ago
Owner

Salut Guillaume, tu peux fournir un patch stp ?

Salut Guillaume, tu peux fournir un patch stp ?
b_b commented 6 years ago
Owner

Version cible mise à 3.1

**Version cible mise à 3.1**
Poster

Hop, le patch :-)

Hop, le patch :-)
Owner

Il est vidé à quel moment ce répertoire de sessions d'ailleurs ?

Il est vidé à quel moment ce répertoire de sessions d'ailleurs ?
Owner

De ce que je lis seule la fonction supprimer_sessions() nettoie les sessions, et est appelée seulement lorsque l'utilisateur se déconnecte (action/logout > $session(id auteur)).
Du coup, je ne vois pas en quoi le patch améliorerait les choses ?

À moins qu'une tâche cron puisse passer nettoyer le répertoire de session également en plus. (mais il n'y en a pas actuellement).

De ce que je lis seule la fonction `supprimer_sessions()` nettoie les sessions, et est appelée seulement lorsque l'utilisateur se déconnecte (action/logout > $session(id auteur)). Du coup, je ne vois pas en quoi le patch améliorerait les choses ? À moins qu'une tâche cron puisse passer nettoyer le répertoire de session également en plus. (mais il n'y en a pas actuellement).
Owner

Assigné à cedric

**Assigné à cedric**

Appliqué par commit r23545.
Statut changé à Fermé

Appliqué par commit r23545. **Statut changé à Fermé**
Owner

Le nombre maxi de session d'un auteur est maintenant limité et vérifié à l'identification initiale et lors de la mise à jour d'une session

Le nombre maxi de session d'un auteur est maintenant limité et vérifié à l'identification initiale et lors de la mise à jour d'une session
b_b commented 6 years ago
Owner
There is no content yet.
Sign in to join this conversation.
No Milestone
No project
No Assignees
6 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.