Qui a éteint le ramasse-miette ?

Messagepar Ayatus » Dim 06 Sep 2009, 15:44

Bonjour,

Certains d'entre vous ont peut être constaté que leur dossier ou table de stockage des sessions avait pris un sérieux embonpoint.
En poussant vos investigations, vous avez pu constater que nombre de ces sessions avaient expiré depuis fort longtemps.
Il ne s'agit ni d'un bug du serveur ou de osCC, ni d'un problème de configuration.

J'ai rencontré cette situation avec mon serveur de test sous Debian Lenny, le serveur de prod sous Debian Etch et mon poste personnel sous Kubuntu 9.04, il n'est pas à exclure la possibilité que d'autres distributions présentent les même symptômes.

Le problème vient du ramasse-miette de session de php qui est désactivé, confiant la tâche à cron.
Cette tâche ne fait le ménage que dans le dossier de stockage par défaut des sessions de php.

Pour y remédier, éditez les fichier includes/application_top.php et admin/includes/application_top.php aux environs de :
Code: Tout sélectionner
// define how the session functions will be used
  require(DIR_WS_FUNCTIONS . 'sessions.php');

// set the session name and save path
  tep_session_name('osCAdminID');
  tep_session_save_path(SESSION_WRITE_DIRECTORY);

Que l'on modifie ainsi :
Code: Tout sélectionner
// define how the session functions will be used
  require(DIR_WS_FUNCTIONS . 'sessions.php');

// récupère la MASTER VALUE de 'session.save_path'
  define('PHP_SESSION_SAVE_PATH_MASTER', ini_get('session.save_path'));

// set the session name and save path
  tep_session_name('osCAdminID');
  tep_session_save_path(SESSION_WRITE_DIRECTORY);

// active le garbage collector de PHP si nécessaire
  if (STORE_SESSIONS == 'mysql' ||  tep_session_save_path() != PHP_SESSION_SAVE_PATH_MASTER && ini_get('session.gc_probability') == '0'){
    ini_set('session.gc_probability', '1');
    ini_set('session.gc_divisor', '100');
  }
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Messagepar cynic- » Lun 07 Sep 2009, 17:04

Merci 1000 fois pour cette astuce
Comment retrouver et vérifier cette table sous phpMyAdmin, et ce dossier se trouve où ?
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar Ayatus » Lun 07 Sep 2009, 18:02

Bonjour,

La table c'est osc_sessions, le dossier est renseigné dans "configuration => session => Répertoire des sessions".
On peut simplifier la clause conditionnelle en retirant "STORE_SESSIONS == 'mysql'", "tep_session_save_path()" se chargeant de cette vérification.
Dans le même ordre d'idée "ini_set('session.gc_divisor', '100');" n'est pas obligatoire.
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23


Retourner vers Bar

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron