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.
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:
<?php function _close() { $this->_gc($this->session_lifetime); return true; } ?>
Funckja _gc() wygląda tak:
<?php function _gc($session_lifetime) { $sql_query = "DELETE FROM " . $this->session_table . " if ($result) { return true; } else { return false; } } ?>
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ć:
<?php function _close() { return true; } ?>
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.