Newsgroup: it.comp.www.php
Titolo: Cancellare file di sessione

Come si fa ad eliminare i file di sessioni piu' vecchi (esempio quelli che 
hanno piu' di 24 ore) ?
grazie
B. 

 B.
<?php
//echo session_save_path();
//echo phpinfo();
 $dir=session_save_path();
 //echo $dir;
 $dh=opendir($dir);
 $arr_files=array();
 while ($filename=readdir($dh))
 {
  if (is_file($dir."/".$filename))
   $arr_files[]=$filename;
 }
 if (count($arr_files)==0) {exit();};
 sort($arr_files);
 foreach ($arr_files as $filename)
 {
  $vecchiaia=round((strtotime("now")-filectime($dir."/".$filename))/3600);
  echo "$filename è stato aperto il: " . date("d m Y H:i:s",
filectime($dir."/".$filename)). "<b>$vecchiaia</b>\n";
  //echo  filectime($dir."/".$filename)-time();
  //echo abs(strtotime(time()-filectime($dir."/".$filename)));
  if ($vecchiaia>10)
  {
  echo "<b>$filename</b>\n";
  //<a href="default.htm"></a>
  unlink($dir."/".$filename);
  }
  //echo "differenza ".strtotime(filectime($dir."/".$filename)) - time() .
" - ". abs(strtotime(filectime($dir."/".$filename)) - time())/86400;
  echo "<br>";
 }
?>
io ho fatto questa routine
conta che non sono gran che con php quindi può essere solo un'idea...
qualcuno mi dirà che il codice fa schifo ma pazienza, nessuno nasce maestro
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


grazie :)
mi chiedevo se c'era qualche parametro da impostare sul php.ini per fare la 
cosa automaticamente. 

 fare la cosa automaticamente.
La garbage collection dei file di sessione č regolata dalle direttive:
 
 session.gc_probability
 session.gc_divisor
 session.gc_maxlifetime
Vedi 
http://it2.php.net/session
.
-- 
Federico


hai ragione, avevo letto il capitolo che mi suggeririvi, solo che non sono 
riuscito ancora  a capire come mai su 2 Server,
quello con il parametro session.gc_divisor = 1000 aveva tutti i file di 
sessione integri nel disco (piu' di 60000!!!),
mentre quello con il parametro a 100 aveva solo i file piu' recenti.
Gli altri parametri gc erano gli stessi in entrambi i server:
session.gc_probability = 1
session.gc_maxlifetime = 1440

 session.gc_probability = 1 session.gc_maxlifetime = 1440
È logico trovare più file dove session.gc_divisor è più grande. La
funzione di GC è influenzata dal rapporto
session.gc_probability/session.gc_divisor. Tale valore rappresenta la
probabilità che l'operazione di GC inizi ogni volta che una sessione
viene inizializzata. Nel tuo caso si ha:
session.gc_divisor = 1000 -> Probabilità di 0,1%
session.gc_divisor = 100  -> Probabilità di 1%
In questa situazione mi sembra corretto attendersi più file di
sessione sul primo server che sul secondo.
Comunque, tieni conto che ci sono alcuni casi in cui la GC non avviene
automaticamente, per esempio quando per salvare i file di sessione si
utilizzano N subdirectory.
-- 
Federico


il fatto e' che mi sembravano eccessivi quei 60,000 file di sessione oppure 
in un altro server con lo stesso valore a 1000 mi sono trovato 6,000 file di 
cui il piu' vecchio era del 2005! Curioso, sembrava quasi che la 
probabilita' di 1/1000 stesse a significare nessuna gc dei file di sessione.
ciao e grazie