Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problemy ze znikającymi plikami sesji
Forum PHP.pl > Forum > PHP
Coyocik
Mam taki jeden głupi problemik, który w sumie nie mam pojęcia skąd się bierze. Sytuacja wygląda następująco: mam postawionego Apacza i php 4.2.2 w wersji pod Windoze (98se w dodatku), wszystko ladnie smiga, dziala nawet i sie nie zwiesza. Wszystkie skrypciki nawet w polaczeniu z mysql'em działają całkiem spoczko. Ale problem zaczyna być przy sesjach. Poczytałem trochę z sieci, poczytałem manuala, poczytałem jakąś naukową książkę w temacie tym i coś tam napisałem. Wszystko ładnie i pięknie działa, ale problem pojawia się gdy zmieniłem session.gc_probability na 100 (domyślnie jest 1). Z pewnych względów ustawione mam session.auto_start, ale problem opisany poniżej występuje też gdy auto_start jest wyłączone. Chodzi o to, że w momencie gdy wchodzę przeglądarką na stronkę wykonuje następujący kod:
Kod
session_register('imie');

session_register('nazwisko');



$imie = "Szymon";

$nazwisko = "Kowalski";

Jako, że autostart jest włączony (nawet i tak by nie musiał, bo session_register niejawnie rozpoczyna sesje), wszystko ładnie zapisuje się do pliku sesji. Potem przechodzę do następnego pliku i tam wykonuje następujący kod:
Kod
if (session_is_registered('imie')) print("Sesja okej<BR>");



printf("SES ID: ".session_id()."<BR>");

printf("IMIE: ".$_SESSION['imie']."<BR>");

Wszystko ładnie się wyświetla i działa. Ale tylko do momentu gdy wchodzę inną przeglądarką na stronkę. W tym momencie ta druga przeglądarka dostaje identyfikator sesji i tworzony jest plik sesji z innym identyfikatorem, ale przy okazji niszczony jest plik sesji, którą rozpoczęła pierwsza przeglądarka. I w tym momencie ta pierwsza gubi informację, które zawarte miała w pliku sesji, mimo, że nadal w ciachu (czy jak tam się ustawi) posiada identyfikator sesji swój, ale pliku sesji nie może odnaleźć, gdyż go fizycznie na dysku od strony serwera ni ma. W momencie gdy miałem session.gc_probability ustawione na 1, to plik sesji się uchowywał, ale zasadniczo z tego co wyczytałem takie niskie prawdopodobieństwo eliminowania zużytych plików sesji jest niezalecany. Czy ktoś jest w stanie wskazać chociażby gdzie szukać rozwiązania tegoż problemu? Najprawdopodobniej jest to winna w konfiguracji php, bo kod skryptu już bardziej prostacki być nie może chyba. A konfiguracje mam zasadniczo default'ową, prócz tego gc_probability i autostart'u - nic poza tym nie zmieniałem.
GeoS
Manual mowi (o php.ini):
Cytat
session.gc_probability określa prawdopodobieństwo w procentach rozpoczęcia procedury gc (garbage collection - zbieranie śmieci) przy każdym wywołaniu. Domyślnie 1.  

session.gc_maxlifetime określa ilość sekund, po jakich dane będą rozpoznawane jako 'śmieci' i usuwane.
Coyocik
Mam ustawione session.gc_maxlifetime standardowo (bodajze to 1440 sec). Zresztą praktycznie caly php.ini mam ustawione standardowo, oprócz session.auto_start i session.gc_probabilty.
domm
dziwi mnie brak kontynuacji tematu :wink:, ponieważ na zestawie windows 2000 + Apache 2.0.39 + php 4.2.2(dev) obserwuję to samo zjawisko...
ustawienie session.gc_probability na "100" powoduje niszczenie wszystkich plików sesji, nieważne czy od ich ostatniej modyfikacji minął czas podany w session.gc_maxlifetime, czy nie.
czy może ktoś zaobserwował to samo, a może inne wersje php działają poprawnie?
dla mnie najprostszym wyjściem jest ustawienie wartośc session.gc_probability na "0" i samodzielna obsługa przeterminowanych sesji (np. osobny programik uruchamiany z harmonogramu co godzinkę i sprzątający po sesjach), ale to chyba powinno działać poprawnie z poziomu php sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.