Witam,

pobawiłem się skryptami php dostępnymi w Internecie, dzięki którym za pomocą "session_set_save_handler" istnieje możliwość przechowywania sesji w bazie danych MySQL.

Za pomocą skrypu z manuala PHP (prosty licznik oparty na sesjach) wypróbowałem czy mechanizm działa.

I owszem działa.

Mam tylko pytanie odnośnie Garbage Collector...

W artykule na php.pl odnośnie funkcji sesji mam napisane coś takiego:

Cytat
gc
bool gc ( int session_lifetime );
Funkcja ta jest odpowiedzialna za usuwanie już nieużywanych zasobów (w slangu nazywamy to: garbage collection).
Do nieużywanych zasobów zaliczają się stare, nieaktywne sesje. Ta funkcja wywoływana jest przez funkcję close.


Chodzi mi o fragment Ta funkcja wywoływana jest przez funkcję close..

W kodzie autora mamy taki zapis:

  1. <?php
  2. function _close()
  3.  {
  4.  $this->_gc($this->session_lifetime);
  5.  
  6.  return true;
  7.  }
  8. ?>


Funckja _gc() wygląda tak:

  1. <?php
  2. function _gc($session_lifetime)
  3.  {
  4.  $sql_query = "DELETE FROM " . $this->session_table . "
  5.  WHERE session_time < " . time() - $session_lifetime . "";
  6.  $result = @mysql_query($sql_query);
  7.  if ($result) {
  8.  return true;
  9.  } else {
  10.  return false;
  11.  }
  12.  }
  13. ?>



W wielu innych źródłach nie spotkałem się z informacją o tym, że funkcja gc wywoływana jest przez funkcję close
i najczęściej funkcja close ma taką postać:

  1. <?php
  2. function _close()
  3.  {
  4.  mysql_close($resource_id);
  5.  
  6.  return true;
  7.  }
  8. ?>


Mam więc pytanie która wersja jest poprawna. Czy funkcja gc MUSI być wywołana przez funkcję close?

Drugi problem:
U mnie na localhoście (Windows XP SP3 / Apache 2.2.9 (Win32) / PHP 5.2.6 / MySQL 5)
wpisy z bazy MySQL nie zostają usunięte automatycznie ani w przypadku gdy w funkcji close wywołuję funkcję gc, ani w przydku gdy jej nie wywołuję. Dlatego nie jestem w stanie sprawdzić czy funkcja gc i mechanizmy Garbage Collector działają (a próbowałem różne ustawienia dyrekrywy session.gc_maxlifetime, session.gc_probability i session.gc_divisor).

Jednym słowem: jak mogę najprościej sprawdzić czy mechanizm gc działa w przypadku danych trzymanych w bazie (a może na windzie nie działa)?

Pozdrawiam.