Skocz do zawartości


 

Zdjęcie

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

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

  • Proszę się zalogować aby odpowiedzieć
5 odpowiedzi na ten temat

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

#1 Rysiu512

Rysiu512

    Czasami na forum

  • Użytkownicy
  • 42 postów
  • Imię:Lukasz

Napisany 22 sierpień 2017 - 08:54

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.


Edytowany przez Rysiu512, 22 sierpień 2017 - 08:56.

  • 0

#2 Gość_nrm_*

Gość_nrm_*
  • Goście

Napisany 22 sierpień 2017 - 09:09

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.


  • 0

#3 Rysiu512

Rysiu512

    Czasami na forum

  • Użytkownicy
  • 42 postów
  • Imię:Lukasz

Napisany 22 sierpień 2017 - 09:14

 

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 :)


  • 0

#4 Gość_nrm_*

Gość_nrm_*
  • Goście

Napisany 22 sierpień 2017 - 09:32

Coś a'la 

cd /path/to/sessions; find -cmin +24 | xargs rm

  • 1

#5 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 22 sierpień 2017 - 10:14

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ć.


  • 0

#6 Pan Kot

Pan Kot

    Mrrr

  • Zbanowani
  • PipPipPipPipPipPipPipPip
  • 2819 postów

Napisany 24 sierpień 2017 - 23:35

20161102_042052.jpg


Edytowany przez Pan Kot, 08 wrzesień 2017 - 12:53.

  • 0





0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników