Prawie. Plik (sesja) nie zostanie natychmiast usunięty, co określają: session.gc_probability i session.gc_divisor.
No, sesja będzie minął, ale usunięcie pliku sesja jest określana jak wskazano w poprzednim punkcie
To jest zwykle prawidłowa, ale jeśli było zaimplementować własną obsługi sesji, można zmienić zachowanie ważności sesji nawet w taki sposób, że session.gc_maxlifetime jest ignorowany
Przechowywanie sesji w dB nie powinien zmieniać te reguły, ale może rozciągnąć je trochę, jeśli chcesz.
edit:
To jest mniej więcej w jaki sposób można zarejestrować swoją obsługi sesji (handler bycia klasa) i wtedy robić, co chcesz z nim
pierwsze, załóżmy, że mamy klasę, że będą sesje obsługi dla naszej aplikacji.
class MySession {
function open($save_path, $session_name) {
}
function close() {
}
function read($id) {
}
function write($id, $sess_data) {
}
function destroy($id) {
}
function gc($maxlifetime) {
}
}
Aby zarejestrować obsługi w PHP, wystarczy tylko zadzwonić session_set_save_handler
funkcji, jak to w naszym przypadku:
// register the session handler
$sess = new MySession();
session_set_save_handler(array($sess, 'open'),
array($sess, 'close'),
array($sess, 'read'),
array($sess, 'write'),
array($sess, 'destroy'),
array($sess, 'gc'));
Należy zauważyć, że nie są w rzeczywistości lepsze sposoby, aby zarejestrować samej obsługi, można rób to nawet w konstruktorze twojej klasy lub na wiele innych sposobów. Ale zakładam, że nie o to tu chodzi.
Ważne jest to, że chociaż PHP podaje potrzebne zmienne odpowiadające standardowemu zachowaniu mechanizmu zarządzania sesją, nie musisz tego szanować (nie polecam tego).
Aby odpowiedzieć poniżej komentarz, ignoruje parametr maxlifetime, zignorować, że w metodzie GC i stosowania cokolwiek uznają za konieczne/prawo, na przykład (przy użyciu kodu db pseudo):
function gc($maxlifetime) {
$sql = "DELETE * FROM MySession WHERE lastAccess < NOW()-3600";
// execute the query, say I have PDO instance in $dbh variable
$dbh->execute($sql);
}
voila, po prostu całkowicie omijałeś ustawienia sesji PHP, robiąc to sam.
Dzięki za odpowiedź. Jeszcze jedno pytanie: Czy mógłbyś wyjaśnić więcej na temat punktu 3 w swojej odpowiedzi? Obecnie używam domyślnych konfiguracji do zarządzania sesją. Nie mam wpływu na php.ini, ponieważ jest to serwer współdzielony, więc nie mogę zmodyfikować session.gc_maxlifetime. Myślę o używaniu bazy danych do przechowywania sesji i kontrolowania czasu życia każdej sesji niezależnie (przy użyciu opcji zapamiętaj mnie). – Songo
Dzięki za wyjaśnienie. Sprawiłeś że jestem szczęśliwy :) – Songo