![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 35 Dołączył: 25.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Od początku: Problem zaczął się gdy okazało się że użytkownicy mojej stronki tracą sesję. Szczególnie mnie to nie dziwiło, gdyż domyślny czas życia sesji dla serwera wynosi 24 min.
Postanowiłem więc to sprawdzić. Przygotowałem 2 pliki: Pierwszy:
oraz drugi:
Odpaliłem pierwszy plik, który zapisuje do sesji jakieś dane, po czym przechodzę do drugiego pliku, który te dane wyświetla. Czekam pół godziny i odświeżam owy drugi plik, aby zobaczyć czy sesja wygasła... jednakże okazuje się że zmienna $_SESSION['test'] nadal wyświetla to co zostało jej przypisane w pierwszym pliku. Coś jest nie tak. Część użytkowników serwisu traci sesję, ja natomiast nie. Wyświetlam sobie konfigurację serwera przez phpinfo() i tam mam tak jak się spodziewałem session.gc_maxlifetime ustawione na 1440, a mimo to sesja mi nie wygasa po owych 24 minutach... Ostatecznie zmodyfikowałem drugi plik do postaci:
aby sprawdzić, czy po przejściu na niego, odczekaniu powyżej ustawionych 3s i odświeżeniu, sesja wygaśnie. Jednak znowu się tak nie dzieje, mimo że php_info pokazuję już session.gc_maxlifetime ustawione faktycznie na 3s. Będę wdzięczny za jakiekolwiek wskazówki co może być nie tak, bo pomysły już mi się skończyły ![]() Edit: Dodam jeszcze tylko, że sam też jestem często automatycznie wylogowywany z panelu zarządzania stronką. Trudno tu określić jakiś związek z czasem nieaktywności. Czasem panel jest otwarty cały dzień ( nie dotykam komputera ) i wieczorem nadal jestem zalogowany, a kiedy indziej po pewnym czasie sesja wygasa. -odświeżam -odświeżam Ten post edytował gargamel 30.08.2011, 11:13:44 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Proszę NIE odświeżać tematu.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 35 Dołączył: 25.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Pisanie powtarzających się postów na ten sam temat jest zabronione, co jest bądź co bądź zrozumiałe.
Jeśli nie można też odświeżać tematów to pytanie co robić jeśli w danym temacie odpowiedzi się nie uzyska, a po kilku dniach owy temat ląduje na eNtej stronie? Że tak pozwolę zacytować sobie - No to co ... wolno jak nic nie wolno? ![]() Chociaż nie, racja. Jakbym poczekał jeszcze kilka dni, to na pewno znalazł by się ktoś, kto przekopie kilka stron forum żeby odpowiedzieć na moje pytanie. Wracając... możesz mi wookieb pokazać punkt regulaminu, który zabrania ODŚWIEŻANIA postów? ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Jest to po prostu spamowanie listy forum poprzez ciągłe sztuczne zawyżanie jego pozycji.
Co do twojej odpowiedzi to przeczytaj http://pl2.php.net/manual/en/session.confi....gc-maxlifetime Cytat Garbage collection may occur during session start (depending on session.gc_probability and session.gc_divisor). Czyli szansa na to, że starsze sesje zostaną usunięte zależy od powyższych ustawień gc_probability oraz gc_divisor (przelicz sobie szansę trafienia na GC). Ustaw po prostu DŁUŻSZY czas życia danych sesyjnych w GC i po problemie. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 35 Dołączył: 25.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
No ok, czyli jeśli ustawię czas sesji na wspomniane 3s, to oznacza to że po takim dopiero czasie dane mogą zostać wyczyszczone (ale nie muszą). Trochę mi się to gryzie z nazwą session.gc_maxlifetime. No ok.
Problem ciągle jednak istnieje. Jeśli ustawię session.gc_maxlifetime na 10h, to i tak spływają zamówienia z utraconą sesją (no a raczej nikt nie uzupełnia formularza zgłoszeniowego przez tyle czasu). Sprawę doraźnie rozwiązałem wpinając w stronę skrypt uruchamiający się w tle co kilka sekund i odświeżający sesję. Przyjrzę się dokładnie jeszcze temu co wookieb wspomniałeś. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Co tzn zamówienia z utraconą sesja? I jak wiele jest tych zamówień?
Głowy nie daje czy to na pewno to ale zawsze robiłem regenerowanie id sesji. Poza tym pamiętaj, że zawsze możesz stworzyć własny mechanizm przechowywania danych sesyjnych,
Powód edycji: [wookieb]:
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 35 Dołączył: 25.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Logowanie do systemu odbywa się na zasadzie przypisania do określonej zmiennej sesyjnej, id zalogowanego użytkownika. Jakiekolwiek zamówienie wykona użytkownik, do owego zamówienia przypisywane jest jego id. Na tej podstawie system dalej rozpoznaje z jakiej firmy / oddziału jest klient.
Tak jak pisałem - 1 na ~8 zamówień spływało bez zapisanego id użytkownika. ( nie wiem czy wszyscy, ale ci z którymi rozmawiałem, korzystali z IE ). W pliku odpowiedzialnym za formularz zamówień na samym początku jest wrzucone Ze statystyk wiem, że u nikogo tyle czasu ten formularz otwarty nie był, a mimo to sesja była gubiona z taką samą częstotliwością, jak przy domyślnych ustawieniach session.gc_maxlifetime. I tak jak wspomniałem, wrzuciłem w formularz dodatkowo skrypt systematycznie odświeżający AJAXem sesję. Od tamtej pory sesja jest utrzymywana, ale na 100% będę w stanie stwierdzić to po weekendzie, jak będzie większy ruch na stronie. Tak czy inaczej jest to chwilowe rozwiązanie. System piszę na nowo i faktycznie jeśli nie uda mi się ustalić co się dzieje z sesją w bieżącej wersji, to będę pisał własny mechanizm. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.04.2025 - 02:01 |