Skocz do zawartości
Zaloguj się, aby obserwować  
Rysiu512

PHP - sesja nie wygasa na krótko po zadeklarowanym czasie

Polecane posty

Mam problem.

Mam zdefiniowane standardowo session.gc_maxlifetime = 1440 (czyli 24 minuty).

Startuję sesję.

Ustawiam jakąś wartość w tablicy $_SESSION.

Nie dotykam przez te 24 minuty nic a nic strony (nie przeładowuję na niej, ani na innych zakładkach).

Na stronie odlicza mi czas od 24 minut do 0 skrypt JS.

Kiedy czas spadnie do 0 przeładowuję stronę (po ponad 24 minutach).

Sprawdzam isset() wartość - jest ustawiona, printfuje ją - jest wartość wpisana prawidłowo (ta z sesji).

Czyli system wykrywa, że jestem zalogowany... a nie powinien...

 

Sprawdzał to też mój kumpel - u niego podobno wylogowało.

Ja sprawdzałem 3x na krótko po upłynięciu 24 minut (max jakoś do 10 sekund) - nie wywaliło mnie.

 

Dzisiaj zostawiłem na noc stronę zalogowaną.

Rano jak przeładowałem to mnie wylogowało poprawie.

 

Czy zmienna session.gc_maxlifetime jest gwarantem, że po tylu sekundach sesja zniknie?

Coś czytałem i jest to chyba bardziej złożone i uzależnione od także zmiennych session.gc_divisor i session.gc_probability?

 

PS. Przepraszam, że bez kodu ale kod jest raczej klasyczny jak to takie rozwiązanie więc nic nowego tam nie ma. Jakoś wątpię aby był błąd w kodzie ale może coś w środowisku samym nie ok? Najwyżej wkleję kod jak trzeba będzie - myślę jednak opisałem dość dobrze o co chodzi.

Edytowano przez Rysiu512 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość nrm

Czy zmienna session.gc_maxlifetime jest gwarantem, że po tylu sekundach sesja zniknie?

Coś czytałem i jest to chyba bardziej złożone i uzależnione od także zmiennych session.gc_divisor i session.gc_probability?

 

Nie jest. Dobrze kombinujesz. Poczytaj o czymś takim jak "garbage collection".

ps. nie wiem po co CI te 24 minuty dokładnie i czy w założeniach czasem nie błędnie przyjmujesz, że to tak powinno działać, ale pomijając to: jeżeli sesję mas zopartą na plikach to zawsze możesz manualnie skasować pliki sesji z datą starszą niż owe 24 minuty.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Nie jest. Dobrze kombinujesz. Poczytaj o czymś takim jak "garbage collection".

 

Tak właśnie czytałem coś, że GC zostanie wywołany z prawdopodobieństwem chyba session.gc_probability / session.gc_divisor. Czyli u mnie 1 / 1000.

 

Wielkie dzięki za szybką i konkretną odpowiedź. Sprawdzę opcję kasowania plików - ale to chyba powinno pomóc :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W sesji możesz zarejestrować zmienną np timestamp : time(), która w wypadku niewygaśnięcia sesji zgodnie z oczekiwaniem będzie dostępna, ale porównując jej wartość z aktualną wartością timestamp możesz odpowiednio zareagować.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×